/*
 * CnbiSoft JavaScript Library Copyright CnbiSoft Technologies LLP
 * License Information at <http://www.CnbiSoft.com/license>
 * 
 * @author CnbiSoft Technologies LLP
 * 
 * @version CnbiSoft/3.2.3-sr2.6105
 */
(function() {
	var y = CnbiSoft(["private", "modules.renderer.highcharts-lib"]);
	if (y !== void 0) {
		var h = "", K = "0", z = ".", t = !!document.createElementNS
				&& !!document.createElementNS("http://www.w3.org/2000/svg","svg").createSVGRect, Ta = /msie/i
				.test(navigator.userAgent)
				&& !window.opera, e = /\s+/g, B = /^#?/, a = /^rgba/i, f = /[#\s]/ig, D = /\{br\}/ig, o = Math.abs, A = Math.pow, J = Object.prototype.toString, q = function(
				a, e) {
			return !a && a !== !1 && a !== 0 ? e : a
		}, ma = function() {
			var a, e, N;
			e = 0;
			for (N = arguments.length; e < N; e += 1)
				if ((a = arguments[e]) || !(a !== !1 && a !== 0))
					return a;
			return h
		}, l = function() {
			var a, e, h;
			e = 0;
			for (h = arguments.length; e < h; e += 1)
				if ((a = arguments[e]) || !(a !== !1 && a !== 0))
					return a
		}, W = function() {
			var a, e, h;
			e = 0;
			for (h = arguments.length; e < h; e += 1)
				if ((a = arguments[e]) || !(a !== !1 && a !== 0))
					if (!isNaN(a = Number(a)))
						return a
		}, m = function(a, e) {
			a = !a && a !== !1 && a !== 0 ? NaN : Number(a);
			return isNaN(a) ? null : e ? o(a) : a
		}, zb = function(a) {
			return typeof a === "string" ? a.replace(D, "<br />") : h
		}, Ca = function(a, e, h) {
			var f, l;
			if (e instanceof Array)
				for (f = 0; f < e.length; f += 1)
					if (typeof e[f] !== "object")
						h && e[f] === void 0 || (a[f] = e[f]);
					else {
						if (a[f] === null || typeof a[f] !== "object")
							a[f] = e[f] instanceof Array ? [] : {};
						Ca(a[f], e[f], h)
					}
			else
				for (f in e)
					if (e[f] !== null && typeof e[f] === "object")
						if (l = J.call(e[f]), l === "[object Object]") {
							if (a[f] === null || typeof a[f] !== "object")
								a[f] = {};
							Ca(a[f], e[f], h)
						} else if (l === "[object Array]") {
							if (a[f] === null || !(a[f] instanceof Array))
								a[f] = [];
							Ca(a[f], e[f], h)
						} else
							a[f] = e[f];
					else
						a[f] = e[f];
			return a
		}, Tb = function(a, e, f) {
			if (typeof a !== "object" && typeof e !== "object")
				return null;
			typeof e !== "object" && (e = a, a = void 0);
			typeof a !== "object" && (a = e instanceof Array ? [] : {});
			Ca(a, e, f);
			return a
		}, Bb = function(a, e) {
			a = Number(a);
			a = isNaN(a) ? 100 : a;
			e !== void 0 && (a = a * e / 100);
			return a % 101
		}, kb = function(a, e, f) {
			var a = a.split(","), h;
			f !== void 0 && (f = W(f.split(",")[0]));
			a[0] = Bb(a[0], f);
			for (h = 1; h < e; h += 1)
				a[h] = a[0] * Bb(a[h], f) / 100;
			return a.join(",")
		}, $ = function(e, l, N) {
			var o = 0, F = 0, na = 0;
			N
					&& N.match(a)
					&& (N = N.split(","), o = N[0].slice(N[0].indexOf("(") + 1), F = N[1], na = N[2], !l
							&& l !== 0
							&& (l = parseInt(N[3].slice(0, N[3].indexOf(")"))
											* 100, 10)));
			if (e)
				if (e.match(a))
					N = e.split(","), o = N[0].slice(N[0].indexOf("(") + 1), F = N[1], na = N[2];
				else {
					e = e.replace(f, h).split(",")[0];
					switch (e.length) {
						case 3 :
							e = e[0] + e[0] + e[1] + e[1] + e[2] + e[2];
							break;
						case 6 :
							break;
						default :
							e = (e + "FFFFFF").slice(0, 6)
					}
					o = parseInt(e.slice(0, 2), 16);
					F = parseInt(e.slice(2, 4), 16);
					na = parseInt(e.slice(4, 6), 16)
				}
			!l && l != 0 && (l = 100);
			typeof l === "string" && (l = l.split(",")[0]);
			l = parseInt(l, 10) / 100;
			return "rgba(" + o + "," + F + "," + na + "," + l + ")"
		}, ha = function(a, e) {
			e = e < 0 || e > 100 ? 100 : e;
			e /= 100;
			var a = a.replace(f, h), l = parseInt(a, 16), o = Math.floor(l
					/ 65536), F = Math.floor((l - o * 65536) / 256);
			return ("000000" + (o * e << 16 | F * e << 8 | (l - o * 65536 - F
					* 256)
					* e).toString(16)).slice(-6)
		}, La = function(a, e) {
			e = e < 0 || e > 100 ? 100 : e;
			e /= 100;
			var a = a.replace(f, h), l = parseInt(a, 16), o = Math.floor(l
					/ 65536), F = Math.floor((l - o * 65536) / 256);
			return ("000000" + (256 - (256 - o) * e << 16
					| 256 - (256 - F) * e << 8 | 256
					- (256 - (l - o * 65536 - F * 256)) * e).toString(16))
					.slice(-6)
		}, vb = {
			circle : "circle",
			triangle : "triangle",
			square : "square",
			diamond : "diamond",
			poly : "poly_",
			spoke : "spoke_"
		}, Xa, Ua = function() {
			function a(e) {
				var Z;
				if (e && e.offsetWidth && e.offsetHeight) {
					if (e.appendChild)
						return e
								.appendChild(Z = document.createElement("span")), Z.className = "_SmartLabel_Container", Z
				} else if ((e = document.getElementsByTagName("body")[0])
						&& e.appendChild)
					return Z = document.createElement("span"), Z.className = "_SmartLabel_Container", A += 1, e
							.appendChild(Z), Z
			}
			function e(a, Z, f) {
				f.innerHTML = a;
				var h, l, wa, o = f.offsetWidth;
				h = Z;
				l = Math.ceil(Z / m);
				if (o < Z)
					return a.length - 1;
				if (l > a.length)
					h = Z - o, l = a.length;
				for (; h > 0;)
					if (f.innerHTML = a.substr(0, l), h = Z - f.offsetWidth, wa = Math
							.floor(h / m))
						l += wa;
					else
						return l;
				for (l += wa; h < 0;)
					if (f.innerHTML = a.substr(0, l), h = Z - f.offsetWidth, wa = Math
							.floor(h / m))
						l += wa;
					else
						break;
				return l
			}
			function f(e, Z, h) {
				if (!(typeof e === "undefined" || typeof e === "object"))
					this.id = e, typeof Z === "string"
							&& (Z = document.getElementById(Z)), this.parentContainer = Z, this.container = a(
							Z, e), this.showNoEllipses = !h, this.init = !0, this.style = {}
			}
			var h = {
				font : "font",
				fontFamily : "font-family",
				"font-family" : "font-family",
				fontWeight : "font-weight",
				"font-weight" : "font-weight",
				fontSize : "font-size",
				"font-size" : "font-size",
				lineHeight : "line-height",
				"line-height" : "line-height",
				textDecoration : "text-decoration",
				"text-decoration" : "text-decoration",
				color : "color",
				whiteSpace : "white-space",
				"white-space" : "white-space",
				padding : "padding",
				margin : "margin",
				background : "background",
				backgroundColor : "background-color",
				"background-color" : "background-color",
				backgroundImage : "background-image",
				"background-image" : "background-image",
				backgroundPosition : "background-position",
				"background-position" : "background-position",
				backgroundPositionLeft : "background-position-left",
				"background-position-left" : "background-position-left",
				backgroundPositionTop : "background-position-top",
				"background-position-top" : "background-position-top",
				backgroundRepeat : "background-repeat",
				"background-repeat" : "background-repeat",
				border : "border",
				borderColor : "border-color",
				"border-color" : "border-color",
				borderStyle : "border-style",
				"border-style" : "border-style",
				borderThickness : "border-thickness",
				"border-thickness" : "border-thickness",
				borderTop : "border-top",
				"border-top" : "border-top",
				borderTopColor : "border-top-color",
				"border-top-color" : "border-top-color",
				borderTopStyle : "border-top-style",
				"border-top-style" : "border-top-style",
				borderTopThickness : "border-top-thickness",
				"border-top-thickness" : "border-top-thickness",
				borderRight : "border-right",
				"border-right" : "border-right",
				borderRightColor : "border-right-color",
				"border-right-color" : "border-right-color",
				borderRightStyle : "border-right-style",
				"border-right-style" : "border-right-style",
				borderRightThickness : "border-right-thickness",
				"border-right-thickness" : "border-right-thickness",
				borderBottom : "border-bottom",
				"border-bottom" : "border-bottom",
				borderBottomColor : "border-bottom-color",
				"border-bottom-color" : "border-bottom-color",
				borderBottomStyle : "border-bottom-style",
				"border-bottom-style" : "border-bottom-style",
				borderBottomThickness : "border-bottom-thickness",
				"border-bottom-thickness" : "border-bottom-thickness",
				borderLeft : "border-left",
				"border-left" : "border-left",
				borderLeftColor : "border-left-color",
				"border-left-color" : "border-left-color",
				borderLeftStyle : "border-left-style",
				"border-left-Style" : "border-left-style",
				borderLeftThickness : "border-left-thickness",
				"border-left-thickness" : "border-left-thickness"
			};
			Xa = function() {
				var a = document.createElement("span"), e, Z = {
					lineHeight : !0,
					"line-height" : !0
				}, f = function() {
					return W(parseInt(a.style.fontSize, 10), 10) * 1.4 + "px"
				};
				a.innerHTML = "fy";
				e = window.getComputedStyle ? function() {
					var e = window.getComputedStyle(a, null);
					return e && e.getPropertyValue("line-height") ? e
							.getPropertyValue("line-height") : f.apply(this,
							arguments)
				} : a.currentStyle ? function() {
					return a.currentStyle.lineHeight
				} : f;
				return function(l) {
					var wa, o = "";
					for (wa in l)
						!Z[wa] && h[wa] && (o += h[wa] + " : " + l[wa] + ";");
					Ta && !t ? a.style.setAttribute("cssText", o) : a
							.setAttribute("style", o);
					wa = e();
					parseFloat(wa) || (wa = f());
					return l.lineHeight = wa
				}
			}();
			var l = {
				position : "absolute",
				top : "-9999em",
				whiteSpace : "nowrap"
			}, o = 0, Z = /\b_SmartLabel\b/, wa = /\b_SmartLabelBR\b/, kc = /(\<[^\<\>]+?\>)|(&(?:[a-z]+|#[0-9]+);|.)/ig, q = RegExp(
					"<span[^>]+?_SmartLabel[^>]+?>(.*?)</span>", "ig"), J = /<[^>][^<]*[^>]+>/i, B = 0, D = 0, m = 0, cb = 0, A = 0, ma, y, E;
			document.getElementsByClassName
					? (ma = "getElementsByClassName", y = "_SmartLabel", E = !0)
					: (ma = "getElementsByTagName", y = "span", E = !1);
			f.prototype = {
				dispose : function() {
					var a = this.container, e;
					if (this.init) {
						if (a && (e = a.parentNode))
							e.removeChild(a), delete this.container;
						delete this.id;
						delete this.style;
						delete this.parentContainer;
						delete this.showNoEllipses
					}
				},
				useEllipsesOnOverflow : function(a) {
					if (this.init)
						this.showNoEllipses = !a
				},
				getSmartText : function(f, h, l, N) {
					if (!this.init)
						return !1;
					if (!this.container)
						this.container = a(this.parentContainer), this
								.setStyle();
					var F = {
						text : f,
						maxWidth : h,
						maxHeight : l,
						width : null,
						height : null,
						oriTextWidth : null,
						oriTextHeight : null,
						oriText : f,
						isTruncated : !1
					}, $a = !1, t, m, A, W, qa = -1, K = -1, mb = -1, z = this.container, Q = [], $ = this.showNoEllipses
							? ""
							: "...", O = function(d) {
						for (var d = d.replace(/^\s\s*/, ""), c = /\s/, g = d.length; c
								.test(d.charAt(g -= 1)););
						return d.slice(0, g + 1)
					};
					if (z) {
						z.innerHTML = f;
						F.oriTextWidth = A = z.offsetWidth;
						F.oriTextHeight = $a = z.offsetHeight;
						if ($a <= l && A <= h)
							return F.width = F.oriTextWidth = A, F.height = F.oriTextHeight = $a, F;
						if (B > l)
							return F.text = "", F.width = F.oriTextWidth = 0, F.height = F.oriTextHeight = 0, F;
						f = O(f).replace(/(\s+)/g, " ");
						$a = J.test(f);
						i = 0;
						A = this.showNoEllipses ? h : h - o;
						if ($a) {
							W = f.replace(kc, "$2");
							f = f.replace(kc,
									'$1<span class="_SmartLabel">$2</span>');
							f = f
									.replace(/(\<br\s*\/*\>)/g,
											"<span class='_SmartLabel _SmartLabelBR'>$1</span>");
							z.innerHTML = f;
							for (var $a = z[ma](y), Ca, O = [], d = -1, j = -1, qa = 0, K = $a.length; qa < K; qa += 1)
								if (f = $a[qa], E || Z.test(f.className))
									if (Ca = f.innerHTML, Ca != "") {
										if (Ca == " ")
											j = O.length;
										else if (Ca == "-")
											d = O.length;
										O.push({
													spaceIdx : j,
													dashIdx : d,
													elem : f
												});
										Q.push(Ca)
									}
							delete $a;
							i = 0;
							$a = O.length;
							D = O[0].elem.offsetWidth;
							if (D > h)
								return F.text = "", F.width = F.oriTextWidth = F.height = F.oriTextHeight = 0, F;
							else
								D > A
										&& !this.showNoEllipses
										&& (A = h - 2 * cb, A > D
												? $ = ".."
												: (A = h - cb, A > D
														? $ = "."
														: (A = 0, $ = "")));
							if (N)
								for (; i < $a; i += 1)
									f = O[i].elem, N = f.offsetLeft
											+ f.offsetWidth, N > A
											&& (m || (m = i), z.offsetWidth > h
													&& (t = i, i = $a));
							else
								for (; i < $a; i += 1)
									if (f = O[i].elem, qa = f.offsetHeight
											+ f.offsetTop, N = f.offsetLeft
											+ f.offsetWidth, Q = null, N > A) {
										if (m || (m = i), N > h)
											K = O[i].spaceIdx, qa = O[i].dashIdx, K > mb
													? (O[K].elem.innerHTML = "<br/>", mb = K)
													: qa > mb
															? (O[qa].elem.innerHTML = qa === i
																	? "<br/>-"
																	: "-<br/>", mb = qa)
															: f.parentNode
																	.insertBefore(
																			Q = document
																					.createElement("br"),
																			f), f.offsetHeight
													+ f.offsetTop > l
													? (Q
															? Q.parentNode
																	.removeChild(Q)
															: mb === qa
																	? O[qa].elem.innerHTML = "-"
																	: O[K].elem.innerHTML = " ", t = i, i = $a)
													: m = null
									} else
										qa > l && (t = i, i = $a);
							if (t < $a) {
								F.isTruncated = !0;
								m = m ? m : t;
								for (i = $a - 1; i >= m; i -= 1)
									f = O[i].elem, f.parentNode.removeChild(f);
								for (; i >= 0; i -= 1)
									f = O[i].elem, wa.test(f.className)
											? f.parentNode.removeChild(f)
											: i = 0
							}
							F.text = z.innerHTML.replace(q, "$1");
							if (F.isTruncated)
								F.text += $, F.text = '<span title="' + W
										+ '">' + F.text + "</span>"
						} else {
							Q = f.split("");
							$a = Q.length;
							t = "";
							m = [];
							z.innerHTML = Q[0];
							D = z.offsetWidth;
							if (A > D)
								m = f.substr(0, e(f, A, z)).split(""), i = m.length
										- 1;
							else if (D > h)
								return F.text = "", F.width = F.oriTextWidth = F.height = F.oriTextHeight = 0, F;
							else
								this.showNoEllipses
										|| (A = h - 2 * cb, A > D
												? $ = ".."
												: (A = h - cb, A > D
														? $ = "."
														: (A = 0, $ = "")));
							if (N)
								for (; i < $a; i += 1) {
									if (m[i] = Q[i], z.innerHTML = W = m
											.join(""), z.offsetWidth > A
											&& (t
													|| (t = W.substr(0,
															W.length - 1)), z.offsetWidth > h))
										return z.innerHTML = F.text = '<span title="'
												+ F.oriText
												+ '">'
												+ O(t)
												+ $
												+ "</span>", F.width = z.offsetWidth, F.height = z.offsetHeight, F
								}
							else
								for (; i < $a; i += 1)
									if (m[i] = Q[i], z.innerHTML = W = m
											.join(""), z.offsetWidth > A
											&& (t
													|| (t = W.substr(0,
															W.length - 1)), z.offsetWidth > h))
										if (K = f.substr(0, m.length)
												.lastIndexOf(" "), qa = f
												.substr(0, m.length)
												.lastIndexOf("-"), K > mb
												? (m.splice(K, 1, "<br/>"), mb = K, N = K
														+ 1)
												: qa > mb
														? (qa === m.length - 1
																? m
																		.splice(
																				qa,
																				1,
																				"<br/>-")
																: m
																		.splice(
																				qa,
																				1,
																				"-<br/>"), mb = qa, N = qa
																+ 1)
														: (m.splice(m.length
																		- 1, 1,
																"<br/>" + Q[i]), N = i), z.innerHTML = W = m
												.join(""), z.offsetHeight > l)
											return F.text = z.innerHTML = "<span title='"
													+ F.oriText
													+ "'>"
													+ O(t)
													+ $ + "</span>", F.width = z.offsetWidth, F.height = z.offsetHeight, F;
										else if (t = null, qa = e(f.substr(N),
												A, z), m.length < N + qa)
											m = m.concat(f.substr(m.length,
													N + qa - m.length)
													.split("")), z.innerHTML = W = m
													.join(""), i = m.length - 1;
							F.text = z.innerHTML = W;
							F.width = z.offsetWidth;
							F.height = z.offsetHeight;
							return F
						}
						F.height = z.offsetHeight;
						F.width = z.offsetWidth
					} else
						F.error = Error("Body Tag Missing!");
					return F
				},
				setStyle : function(a) {
					if (!this.init)
						return !1;
					var e;
					if (a !== this.style || this.styleNotSet) {
						if (a) {
							if (this.style && this.container)
								for (e in this.style)
									a[e] || (this.container.style[e] = "");
							delete this.style;
							this.style = a
						}
						if (this.container) {
							a = this.container;
							e = this.style;
							for (var f in e)
								a.style[f] = e[f];
							for (f in l)
								a.style[f] = l[f];
							this.container.innerHTML = "WgI";
							m = Math.ceil(this.container.offsetWidth / 3);
							B = this.container.offsetHeight;
							this.container.innerHTML = "...";
							o = this.container.offsetWidth;
							this.container.innerHTML = ".";
							cb = this.container.offsetWidth;
							this.styleNotSet = !1
						} else
							this.styleNotSet = !0
					}
				},
				getTextSize : function(e, f, Z) {
					if (!this.init)
						return !1;
					if (!this.container)
						this.container = a(this.parentContainer), this
								.setStyle();
					var h = {
						text : e,
						width : null,
						height : null,
						oriTextWidth : null,
						oriTextHeight : null,
						isTruncated : !1
					}, l = this.container;
					if (l
							&& (l.innerHTML = e, h.oriTextWidth = l.offsetWidth, h.oriTextHeight = l.offsetHeight, h.width = Math
									.min(h.oriTextWidth, f), h.height = Math
									.min(h.oriTextHeight, Z), h.width < h.oriTextWidth
									|| h.height < h.oriTextHeight))
						h.isTruncated = !0;
					return h
				},
				getOriSize : function(e) {
					if (!this.init)
						return !1;
					if (!this.container)
						this.container = a(this.parentContainer), this
								.setStyle();
					var f = {
						text : e,
						width : null,
						height : null
					}, Z = this.container;
					if (Z)
						Z.innerHTML = e, f.width = Z.offsetWidth, f.height = Z.offsetHeight;
					return f
				}
			};
			return f.prototype.constructor = f
		}(), Q = function() {
			var a = {
				top : {
					align : "center",
					verticalAlign : "top",
					textAlign : "center"
				},
				right : {
					align : "right",
					verticalAlign : "middle",
					textAlign : "left"
				},
				bottom : {
					align : "center",
					verticalAlign : "bottom",
					textAlign : "center"
				},
				left : {
					align : "left",
					verticalAlign : "middle",
					textAlign : "right"
				}
			}, e = /([^\,^\s]+)\)$/g, f = function(a, e) {
				var f;
				if (/^(bar|bar3d)$/.test(a))
					this.isBar = !0, this.yPos = "bottom", this.yOppPos = "top", this.xPos = "left", this.xOppPos = "right";
				f = parseInt(e.labelstep, 10);
				this.labelStep = f > 1 ? f : 1;
				this.showLabel = W(e.showlabels, e.shownames, 1);
				this.is3D = /3d$/.test(a)
			};
			f.prototype = {
				isBar : !1,
				yPos : "left",
				yOppPos : "right",
				xPos : "bottom",
				xOppPos : "top",
				addAxisGridLine : function(f, h, l, Z, wa, N, o, m) {
					var t = l === "" ? !1 : !0, q = Z > 0 || N.match(e)[1] > 0
							? !0
							: !1;
					if (t || q) {
						q || (N = "rgba(0,0,0,0)", Z = 0.1);
						h = {
							isGrid : !0,
							width : Z,
							dashStyle : wa,
							color : N,
							value : h,
							zIndex : o === void 0 ? 2 : o
						};
						if (t)
							m = f.opposite
									? m ? this.xOppPos : this.yOppPos
									: m ? this.xPos : this.yPos, m = a[m], h.label = {
								text : l,
								style : f.labels.style,
								textAlign : m.textAlign,
								align : m.align,
								verticalAlign : m.verticalAlign,
								rotation : 0,
								x : 0,
								y : 0
							};
						f.plotLines.push(h)
					}
				},
				addAxisAltGrid : function(a, e) {
					if (!this.is3D) {
						var f = W(a._lastValue, a.min), Z = l(a._altGrid, !1);
						Z && a.plotBands.push({
									isGrid : !0,
									color : a.alternateGridColor,
									to : e,
									from : f,
									zIndex : 1
								});
						a._lastValue = e;
						a._altGrid = !Z
					}
				},
				addXaxisCat : function(e, f, h, Z) {
					var l = a[e.opposite ? this.xOppPos : this.xPos], f = {
						isGrid : !0,
						width : 0.1,
						color : "rgba(0,0,0,0)",
						value : f,
						label : {
							text : Z,
							style : e.labels.style,
							textAlign : l.textAlign,
							align : l.align,
							verticalAlign : l.verticalAlign,
							rotation : 0,
							x : 0,
							y : 0
						}
					};
					if (h % this.labelStep !== 0)
						f.stepped = !0, f.label.style = e.steppedLabels.style;
					e.plotLines.push(f)
				},
				addVline : function(a, e, f, Z) {
					var wa = Z._FCconf, N = wa.isBar, Z = Z.chart.plotBorderWidth, o = Z
							% 2, m = wa.divlineStyle, t = zb(e.label), q = Boolean(W(
							e.showlabelborder, wa.showVLineLabelBorder, 1)), A = Boolean(W(
							e.showlabelbackground, 1)), Ab = l(e.labelhalign, N
									? "left"
									: "center"), D = l(e.labelvalign,
							N ? "middle" : "bottom").toLowerCase(), J = W(
							e.labelposition, 0), B = W(e.lineposition, 0.5), z = W(
							e.showvlines, wa.showVLines, 1), ma = W(e.alpha,
							wa.vLineAlpha, 80), K = l(e.color, wa.vLineColor,
							"333333").replace(/^#?/, "#"), R = l(
							e.labelbgcolor, wa.vLineLabelBgColor, "333333")
							.replace(/^#?/, "#"), y = K, E = W(e.thickness,
							wa.vLineThickness, 1), O = E * 0.5, Q = Boolean(Number(l(
							e.dashed, 0))), ub = W(e.dashlen, 5), Ca = W(
							e.dashgap, 2), P = wa.smartLabel, ha = parseInt(
							m.fontSize, 10)
							+ 2, fa = 0, kb = W(e.rotatelabel,
							wa.rotateVLineLabels) ? 270 : 0, B = B < 0 || B > 1
							? 0.5
							: B, J = J < 0 || J > 1 ? 0 : J;
					P.setStyle(m);
					P = P.getOriSize(t);
					K = $(K, z ? ma : "0");
					if (N) {
						switch (D) {
							case "top" :
								ha -= P.height + O + 2;
								break;
							case "middle" :
								ha -= P.height * 0.5 + 1;
								break;
							default :
								ha += O
						}
						e.labelhalign || (fa -= P.width * J)
					} else {
						switch (D) {
							case "top" :
								ha -= P.height + 2 + (Z || 1) * (1 - J) + J;
								break;
							case "middle" :
								ha -= P.height * 0.5 + Z * (1 - J * 2);
								break;
							default :
								ha += (Z - o) * J
						}
						switch (Ab) {
							case "left" :
								fa += E;
								break;
							case "right" :
								fa -= E + 1
						}
					}
					a.plotLines.push({
								isVline : !0,
								color : K,
								width : E,
								value : f - 1 + B,
								zIndex : !wa.is3d && e.showontop === "1"
										? 5
										: 3,
								dashStyle : Q ? ab(ub, Ca, E) : void 0,
								label : {
									text : t,
									align : N ? "left" : "center",
									offsetScale : J,
									rotation : kb,
									y : ha,
									x : fa,
									textAlign : Ab,
									style : {
										color : z ? y : K,
										fontSize : m.fontSize,
										fontFamily : m.fontFamily,
										lineHeight : m.lineHeight,
										border : z && q ? "1px solid" : h,
										borderColor : z && q ? y : h,
										backgroundColor : A ? R : h,
										backgroundOpacity : z && A ? l(
												e.labelbgalpha,
												wa.vLineLabelBgAlpha)
												/ 100 : 0
									}
								}
							})
				}
			};
			return f.prototype.constructor = f
		}(), E = function() {
			function a(e, f, h) {
				var l;
				if (f <= 0)
					return String(Math.round(e));
				if (isNaN(f))
					return e = e.toString(), e.length > 12
							&& e.indexOf(z) != -1
							&& (f = 12 - e.split(z)[0].length, l = A(10, f), e = String(Math
									.round(e * l)
									/ l)), e;
				l = A(10, f);
				e = String(Math.round(e * l) / l);
				if (h == 1) {
					e.indexOf(z) == -1 && (e += ".0");
					h = e.split(z);
					f -= h[1].length;
					for (h = 1; h <= f; h++)
						e += K
				}
				return e
			}
			function e(a, f, l, o) {
				var N = Number(a);
				if (isNaN(N))
					return h;
				var m = h, F = !1, na = h, t = h, q = na = 0, na = 0, q = a.length;
				a.indexOf(z) != -1
						&& (m = a.substring(a.indexOf(z) + 1, a.length), q = a
								.indexOf(z));
				N < 0 && (F = !0, na = 1);
				na = a.substring(na, q);
				a = na.length;
				N = o.length - 1;
				q = o[N];
				if (a < q)
					t = na;
				else
					for (; a >= q;)
						t = (a - q ? l : h) + na.substr(a - q, q) + t, a -= q, q = (N -= 1) <= 0
								? o[0]
								: o[N], a < q && (t = na.substring(a, 0) + t);
				m != h && (t = t + f + m);
				F == !0 && (t = "-" + t);
				return t
			}
			var f = {
				formatnumber : "1",
				formatnumberscale : "1",
				defaultnumberscale : h,
				numberscaleunit : ["K", "M"],
				numberscalevalue : [1E3, 1E3],
				numberprefix : h,
				numbersuffix : h,
				decimals : h,
				forcedecimals : K,
				yaxisvaluedecimals : "2",
				decimalseparator : z,
				thousandseparator : ",",
				thousandseparatorposition : [3],
				indecimalseparator : h,
				inthousandseparator : h,
				sformatnumber : "1",
				sformatnumberscale : K,
				sdefaultnumberscale : h,
				snumberscaleunit : ["K", "M"],
				snumberscalevalue : [1E3, 1E3],
				snumberprefix : h,
				snumbersuffix : h,
				sdecimals : "2",
				sforcedecimals : K,
				syaxisvaluedecimals : "2",
				xFormatNumber : K,
				xFormatNumberScale : K,
				xDefaultNumberScale : h,
				xNumberScaleUnit : ["K", "M"],
				xNumberScaleValue : [1E3, 1E3],
				xNumberPrefix : h,
				xNumberSuffix : h
			}, m = {
				mscombidy2d : {
					formatnumberscale : "1"
				}
			}, F = function(a, e) {
				var h, o, F, t, na, A, J, D, Ab, B, z, K = e.name, E = m[K];
				typeof E !== "object" && (E = f);
				q(a.numberscaleunit) && (h = a.numberscaleunit.split(","));
				if (o = q(a.snumberscaleunit, a.numberscaleunit))
					o = o.split(",");
				if (F = q(a.xnumberscaleunit, a.numberscaleunit))
					F = F.split(",");
				if (t = q(a.ticknumberscaleunit, a.numberscaleunit))
					t = t.split(",");
				if (na = q(a.ynumberscaleunit, a.numberscaleunit))
					na = na.split(",");
				q(a.numberscalevalue) && (A = a.numberscalevalue.split(","));
				if (z = q(a.snumberscalevalue, a.numberscalevalue))
					z = z.split(",");
				if (J = q(a.xnumberscalevalue, a.numberscalevalue))
					J = J.split(",");
				if (D = q(a.ticknumberscalevalue, a.numberscalevalue))
					D = D.split(",");
				if (Ab = q(a.ynumberscalevalue, a.numberscalevalue))
					Ab = Ab.split(",");
				if (q(a.thousandseparatorposition)) {
					B = a.thousandseparatorposition.split(",");
					for (var R = B.length, y, O = W(B[R]), O = O
							? O
							: f.thousandseparatorposition[0]; R;)
						R -= 1, (y = W(Math.abs(B[R]))) ? O = y : y = O, B[R] = y
				}
				e || (e = {});
				R = W(a.scalerecursively, 0);
				y = W(a.sscalerecursively, R);
				var O = W(a.xscalerecursively, R), Q = W(a.maxscalerecursion,
						-1), $ = W(a.smaxscalerecursion, Q), ub = W(
						a.xmaxscalerecursion, Q), Ca = q(a.scaleseparator, " "), ha = q(
						a.sscaleseparator, Ca), fa = q(a.xscaleseparator, Ca);
				if (!Q || Q == 0)
					Q = -1;
				this.paramLabels = h = {
					formatnumber : l(a.formatnumber, e.formatnumber,
							E.formatnumber, f.formatnumber),
					formatnumberscale : l(a.formatnumberscale,
							e.formatnumberscale, E.formatnumberscale,
							f.formatnumberscale),
					defaultnumberscale : ma(a.defaultnumberscale,
							e.defaultnumberscale, E.defaultnumberscale,
							f.defaultnumberscale),
					numberscaleunit : l(h, e.numberscaleunit,
							E.numberscaleunit, f.numberscaleunit).concat(),
					numberscalevalue : l(A, e.numberscalevalue,
							E.numberscalevalue, f.numberscalevalue).concat(),
					numberprefix : ma(a.numberprefix, e.numberprefix,
							E.numberprefix, f.numberprefix),
					numbersuffix : ma(a.numbersuffix, e.numbersuffix,
							E.numbersuffix, f.numbersuffix),
					decimalprecision : parseInt(l.apply(window,
									a.decimals === "auto"
											? [f.decimalprecision]
											: [a.decimals, a.decimalprecision,
													e.decimals, E.decimals,
													f.decimals,
													e.decimalprecision,
													E.decimalprecision,
													f.decimalprecision]), 10),
					forcedecimals : l(a.forcedecimals, e.forcedecimals,
							E.forcedecimals, f.forcedecimals),
					decimalseparator : l(a.decimalseparator,
							e.decimalseparator, E.decimalseparator,
							f.decimalseparator),
					thousandseparator : l(a.thousandseparator,
							e.thousandseparator, E.thousandseparator,
							f.thousandseparator),
					thousandseparatorposition : l(B,
							e.thousandseparatorposition,
							E.thousandseparatorposition,
							f.thousandseparatorposition),
					indecimalseparator : ma(a.indecimalseparator,
							e.indecimalseparator, E.indecimalseparator,
							f.indecimalseparator),
					inthousandseparator : ma(a.inthousandseparator,
							e.inthousandseparator, E.inthousandseparator,
							f.inthousandseparator),
					scalerecursively : R,
					maxscalerecursion : Q,
					scaleseparator : Ca
				};
				if (!e.useScaleRecursively
						|| (h.numberscalevalue && h.numberscalevalue.length) != (h.numberscaleunit && h.numberscaleunit.length))
					h.scalerecursively = R = 0;
				this.param1 = A = {
					formatnumber : h.formatnumber,
					formatnumberscale : h.formatnumberscale,
					defaultnumberscale : h.defaultnumberscale,
					numberscaleunit : h.numberscaleunit.concat(),
					numberscalevalue : h.numberscalevalue.concat(),
					numberprefix : h.numberprefix,
					numbersuffix : h.numbersuffix,
					decimalprecision : parseInt(l(a.yaxisvaluedecimals,
							h.decimalprecision, 2)),
					forcedecimals : l(a.forceyaxisvaluedecimals,
							h.forcedecimals),
					decimalseparator : h.decimalseparator,
					thousandseparator : h.thousandseparator,
					thousandseparatorposition : h.thousandseparatorposition
							.concat(),
					indecimalseparator : h.indecimalseparator,
					inthousandseparator : h.inthousandseparator,
					scalerecursively : R,
					maxscalerecursion : Q,
					scaleseparator : Ca
				};
				this.paramX = {
					formatnumber : l(a.xformatnumber, h.formatnumber),
					formatnumberscale : l(a.xformatnumberscale,
							h.formatnumberscale),
					defaultnumberscale : ma(a.xdefaultnumberscale,
							h.defaultnumberscale),
					numberscaleunit : l(F, h.numberscaleunit.concat()),
					numberscalevalue : l(J, h.numberscalevalue.concat()),
					numberprefix : l(a.xnumberprefix, h.numberprefix),
					numbersuffix : l(a.xnumbersuffix, h.numbersuffix),
					decimalprecision : parseInt(l(a.xaxisvaluedecimals,
							a.xaxisvaluesdecimals, h.decimalprecision, 2)),
					forcedecimals : l(a.forcexaxisvaluedecimals, 0),
					decimalseparator : h.decimalseparator,
					thousandseparator : h.thousandseparator,
					thousandseparatorposition : h.thousandseparatorposition
							.concat(),
					indecimalseparator : h.indecimalseparator,
					inthousandseparator : h.inthousandseparator,
					scalerecursively : O,
					maxscalerecursion : ub,
					scaleseparator : fa
				};
				if (!e.useScaleRecursively
						|| (this.paramX.numberscalevalue && this.paramX.numberscalevalue.length) != (this.paramX.numberscaleunit && this.paramX.numberscaleunit.length))
					this.paramX.scalerecursively = O = 0;
				this.param2 = {
					formatnumber : l(a.sformatnumber, e.sformatnumber,
							f.sformatnumber),
					formatnumberscale : l(a.sformatnumberscale,
							e.sformatnumberscale, f.sformatnumberscale),
					defaultnumberscale : ma(a.sdefaultnumberscale,
							e.sdefaultnumberscale, h.defaultnumberscale),
					numberscaleunit : l(o, e.snumberscaleunit,
							f.snumberscaleunit).concat(),
					numberscalevalue : l(z, e.snumberscalevalue,
							f.snumberscalevalue).concat(),
					numberprefix : ma(a.snumberprefix, e.snumberprefix,
							f.snumberprefix),
					numbersuffix : ma(a.snumbersuffix, e.snumbersuffix,
							f.snumbersuffix),
					decimalprecision : parseInt(l(a.syaxisvaluedecimals,
									a.sdecimals, e.sdecimals, f.sdecimals), 10),
					forcedecimals : l(a.forcesyaxisvaluedecimals,
							a.sforcedecimals, e.sforcedecimals,
							f.sforcedecimals),
					decimalseparator : l(a.decimalseparator,
							e.decimalseparator, f.decimalseparator),
					thousandseparator : l(a.thousandseparator,
							e.thousandseparator, f.thousandseparator),
					thousandseparatorposition : h.thousandseparatorposition
							.concat(),
					indecimalseparator : l(a.indecimalseparator,
							e.indecimalseparator, f.indecimalseparator),
					inthousandseparator : l(a.inthousandseparator,
							e.inthousandseparator, f.inthousandseparator),
					scalerecursively : y,
					maxscalerecursion : $,
					scaleseparator : ha
				};
				if (!e.useScaleRecursively
						|| (this.param2.numberscalevalue && this.param2.numberscalevalue.length) != (this.param2.numberscaleunit && this.param2.numberscaleunit.length))
					this.param2.scalerecursively = y = 0;
				this.paramScale = {
					formatnumber : l(a.tickformatnumber, h.formatnumber),
					formatnumberscale : l(a.tickformatnumberscale,
							h.formatnumberscale),
					defaultnumberscale : ma(a.tickdefaultnumberscale,
							h.defaultnumberscale),
					numberscaleunit : l(t, h.numberscaleunit.concat()),
					numberscalevalue : l(D, h.numberscalevalue.concat()),
					numberprefix : l(a.ticknumberprefix, h.numberprefix),
					numbersuffix : l(a.ticknumbersuffix, h.numbersuffix),
					decimalprecision : parseInt(l(a.tickvaluedecimals,
							h.decimalprecision, "2")),
					forcedecimals : l(a.forcetickvaluedecimals,
							h.forcedecimals, 0),
					decimalseparator : h.decimalseparator,
					thousandseparator : h.thousandseparator,
					thousandseparatorposition : h.thousandseparatorposition
							.concat(),
					indecimalseparator : h.indecimalseparator,
					inthousandseparator : h.inthousandseparator,
					scalerecursively : R,
					maxscalerecursion : Q,
					scaleseparator : Ca
				};
				if (/^(bubble|scatter|selectscatter)$/.test(K))
					A.formatnumber = l(a.yformatnumber, A.formatnumber), A.formatnumberscale = l(
							a.yformatnumberscale, A.formatnumberscale), A.defaultnumberscale = ma(
							a.ydefaultnumberscale, A.defaultnumberscale), A.numberscaleunit = l(
							na, A.numberscaleunit), A.numberscalevalue = l(Ab,
							A.numberscalevalue), A.numberprefix = l(
							a.ynumberprefix, A.numberprefix), A.numbersuffix = l(
							a.ynumbersuffix, A.numbersuffix), h.formatnumber = l(
							a.yformatnumber, h.formatnumber), h.formatnumberscale = l(
							a.yformatnumberscale, h.formatnumberscale), h.defaultnumberscale = ma(
							a.ydefaultnumberscale, h.defaultnumberscale), h.numberscaleunit = l(
							a.ynumberscaleunit, h.numberscaleunit.concat()), h.numberscalevalue = l(
							a.ynumberscalevalue, h.numberscalevalue.concat()), h.numberprefix = l(
							a.ynumberprefix, h.numberprefix), h.numbersuffix = l(
							a.ynumbersuffix, h.numbersuffix);
				if (/^(mscombidy2d|mscombidy3d)$/.test(K))
					this.param2.formatnumberscale = W(a.sformatnumberscale, "1");
				if (/^(pie2d|pie3d|doughnut2d|doughnut3d|marimekko|pareto2d|pareto3d)$/
						.test(K))
					h.decimalprecision = l(a.decimals, "2");
				R
						&& (h.numberscalevalue.push(1), h.numberscaleunit
								.unshift(this.paramLabels.defaultnumberscale), this.param1.numberscalevalue
								.push(1), this.param1.numberscaleunit
								.unshift(this.param1.defaultnumberscale), this.paramScale.numberscalevalue
								.push(1), this.paramScale.numberscaleunit
								.unshift(this.paramScale.defaultnumberscale));
				y
						&& (this.param2.numberscalevalue.push(1), this.param2.numberscaleunit
								.unshift(this.param2.defaultnumberscale));
				O
						&& (this.paramX.numberscalevalue.push(1), this.paramX.numberscaleunit
								.unshift(this.paramX.defaultnumberscale))
			};
			F.prototype = {
				percentValue : function(f) {
					var h = isNaN(this.paramLabels.decimalprecision)
							? "2"
							: this.paramLabels.decimalprecision;
					return e(a(f, h, this.paramLabels.forcedecimals),
							this.paramLabels.decimalseparator,
							this.paramLabels.thousandseparator,
							this.paramLabels.thousandseparatorposition)
							+ "%"
				},
				getCleanValue : function(a, e) {
					var f = a, l = this.paramLabels.indecimalseparator, N = this.paramLabels.inthousandseparator;
					f += h;
					q(N)
							&& (N = N.replace(/(\W)/ig, "\\$1"), f = f
									.toString().replace(RegExp(N, "g"), h));
					q(l) && (f = f.replace(l, z));
					a = !isNaN(f = parseFloat(f)) && isFinite(f) ? f : NaN;
					return isNaN(a) ? null : e ? o(a) : a
				},
				dataLabels : function(a, e) {
					return na(a, e ? this.param2 : this.paramLabels)
				},
				yAxis : function(a) {
					return na(a, this.param1)
				},
				xAxis : function(a) {
					return na(a, this.paramX)
				},
				sYAxis : function(a) {
					return na(a, this.param2)
				},
				scale : function(a) {
					return na(a, this.paramScale)
				}
			};
			F.prototype.constructor = F;
			var na = function(f, o) {
				if (f !== null) {
					var f = Number(f), N = f + h, m;
					m = o.formatnumberscale == 1 ? o.defaultnumberscale : h;
					var F;
					F = (F = N.split(".")[1]) ? F.length : o.forcedecimals
							? "2"
							: h;
					if (o.formatnumberscale == 1) {
						var t, N = f;
						m = o.numberscalevalue;
						t = o.numberscaleunit;
						var na = {}, A = o.defaultnumberscale, q = 0, J, D = [], $a = [];
						if (o.scalerecursively) {
							for (q = 0; q < m.length; q++)
								if (J = W(m[q]) || 1E3, Math.abs(Number(N)) >= J
										&& q < m.length - 1)
									A = N % J, N = (N - A) / J, A != 0
											&& (D.push(A), $a.push(t[q]));
								else {
									D.push(N);
									$a.push(t[q]);
									break
								}
							D.reverse();
							$a.reverse();
							na.value = D;
							na.scale = $a
						} else {
							if (m.length === t.length)
								for (q = 0; q < m.length; q++)
									if ((J = W(m[q]) || 1E3)
											&& Math.abs(Number(N)) >= J)
										A = t[q] || h, N = Number(N) / J;
									else
										break;
							na.value = N;
							na.scale = A
						}
						t = na;
						f = N = t.value;
						m = t.scale
					}
					if (o.scalerecursively && o.formatnumberscale != 0) {
						m = t.value;
						t = t.scale;
						na = o.maxscalerecursion == -1 ? m.length : Math.min(
								m.length, o.maxscalerecursion);
						if (o.formatnumber == 1) {
							N = "";
							for (D = 0; D < na; D++)
								q = D == 0 ? m[D] : Math.abs(m[D]), J = String(q), D == na
										- 1
										&& (J = a(q, l(o.decimalprecision, F),
												o.forcedecimals)), N = N
										+ e(J, o.decimalseparator,
												o.thousandseparator,
												o.thousandseparatorposition)
										+ t[D]
										+ (D < na - 1 ? o.scaleseparator : "")
						} else {
							N = "";
							for (D = 0; D < na; D++)
								N = N + String(D == 0 ? m[D] : Math.abs(m[D]))
										+ t[D]
										+ (D < na - 1 ? o.scaleseparator : "")
						}
						N = (o.numberprefix || h) + N + (o.numbersuffix || h);
						delete m;
						delete t
					} else
						o.formatnumber == 1
								&& (N = a(f, l(o.decimalprecision, F),
										o.forcedecimals), N = e(N,
										o.decimalseparator,
										o.thousandseparator,
										o.thousandseparatorposition)), N = (o.numberprefix || h)
								+ N + m + (o.numbersuffix || h);
					return N
				}
			};
			return F
		}(), O = function() {
			var a = function(a, f, h, l, o) {
				a = Math.abs(f - a);
				f = a / (h + 1);
				e(a / (h + 1)) > e(l)
						&& (o && Number(f) / Number(l) < (l > 1 ? 2 : 0.5)
								&& (l /= 10), f = (Math.floor(f / l) + 1) * l, a = f
								* (h + 1));
				return a
			}, e = function(a) {
				var a = Math.abs(a), a = String(a), e = 0, f = a.indexOf(z);
				f != -1 && (e = a.length - f - 1);
				return e
			};
			return function(f, l, o, m, t, q, A, D) {
				var J, f = isNaN(f) == !0 || f == void 0 ? 0.1 : f, l = isNaN(l) == !0
						|| l == void 0 ? 0 : l;
				f == l && f == 0 && (f = 0.1);
				var q = typeof q === void 0 ? !0 : q, B = Math.max(Math
								.floor(Math.log(Math.abs(l)) / Math.LN10), Math
								.floor(Math.log(Math.abs(f)) / Math.LN10));
				J = Math.pow(10, B);
				Math.abs(f) / J < 2 && Math.abs(l) / J < 2
						&& (B--, J = Math.pow(10, B));
				B = Math.pow(10, Math.floor(Math.log(f - l) / Math.LN10));
				f - l > 0 && J / B >= 10 && (J = B);
				var B = (Math.floor(f / J) + 1) * J, z;
				l < 0 ? z = -1 * (Math.floor(Math.abs(l / J)) + 1) * J : q
						? z = 0
						: (z = Math.floor(Math.abs(l / J) - 1) * J, z = z < 0
								? 0
								: z);
				(typeof t === void 0 || t) && f <= 0 && (B = 0);
				t = o == null || o == void 0 || o == h ? !1 : !0;
				q = m == null || m == void 0 || m == h || isNaN(Number(m))
						? !1
						: !0;
				f = t == !1 || t == !0 && Number(o) < f ? B : Number(o);
				l = q == !1 || q == !0 && Number(m) > l ? z : Number(m);
				m = Math.abs(f - l);
				if (q == !1 && t == !1 && D == !0)
					if (f > 0 && l < 0)
						for (var D = !1, o = J > 10 ? J / 10 : J, t = a(l, f,
								A, o, !1)
								- (A + 1) * o, E, ma, W, K; D == !1;) {
							if (t += (A + 1) * o, !(e(t / (A + 1)) > e(o)))
								if (E = t - m, q = t / (A + 1), z = Math.min(
										Math.abs(l), f), B = z == Math.abs(l)
										? -1
										: 1, A == 0)
									D = !0;
								else
									for (K = 1; K <= Math.floor((A + 1) / 2); K++)
										ma = q * K, !(ma - z > E)
												&& ma > z
												&& (W = t - ma, W / q == Math
														.floor(W / q)
														&& ma / q == Math
																.floor(ma / q)
														&& (m = t, f = B == -1
																? W
																: ma, l = B == -1
																? -ma
																: -W, D = !0))
						}
					else
						D = a(l, f, A, J, !0), E = D - m, m = D, f > 0
								? f += E
								: l -= E;
				else if (D == !0 && A > 0) {
					D = 0;
					for (o = 1;;) {
						E = A + D * o;
						E = E == 0 ? 1 : E;
						if (!(e(m / (E + 1)) > e(J)))
							break;
						D = o == -1 || D > A ? ++D : D;
						if (D > 25) {
							E = 0;
							break
						}
						o = D <= A ? o * -1 : 1
					}
					A = E
				}
				return {
					Max : f,
					Min : l,
					Range : m,
					interval : J,
					divGap : (f - l) / (A + 1)
				}
			}
		}(), fa = function() {
			var a = function(a, e) {
				this.title.y = a.offsetHeight / 2;
				if (e !== void 0)
					this.title.text = e
			};
			a.prototype = {
				chart : {
					events : {},
					margin : [0, 0, 0, 0]
				},
				credits : {
					href : "#",
					text : "",
					enabled : !0
				},
				legend : {
					enabled : !1
				},
				title : {
					text : "Chart Placeholder",
					style : {
						fontFamily : "Verdana",
						fontSize : "10px",
						color : "#666666"
					}
				},
				plotOptions : {
					series : {}
				},
				series : [],
				exporting : {
					enabled : !1
				}
			};
			return a.prototype.constructor = a
		}(), Va = {
			"true" : {
				"true" : "bottom",
				"false" : "top"
			},
			"false" : {
				"true" : "top",
				"false" : "bottom"
			}
		}, hb = function() {
			var a = /^s$/i, e = function() {
				return {
					x : this.category,
					y : this.y,
					series : this.series,
					point : this,
					percentage : this.percentage,
					total : this.total || this.stackTotal
				}
			}, f = function(a) {
				var f;
				f = {
					series : {},
					chart : this.chart,
					id : this.id,
					label : this.label,
					options : this.options,
					svgElm : this.svgElm,
					toolText : a,
					getLabelConfig : e,
					tooltipPos : []
				};
				return {
					mouseover : function(a) {
						var e = this.chart, h = e.plotLeft, l = e.plotTop;
						if (e = e.tooltip)
							f.tooltipPos[0] = (a.layerX || a.x || a.offsetX || a.originalEvent
									&& a.originalEvent.layerX)
									- h + 20, f.tooltipPos[1] = (a.layerY
									|| a.y || a.offsetY || a.originalEvent
									&& a.originalEvent.layerY)
									- l - 15, e.refresh(f)
					},
					mousemove : function(a) {
						var e = this.chart, h = e.plotLeft, l = e.plotTop;
						if (e = e.tooltip)
							f.tooltipPos[0] = (a.layerX || a.x || a.offsetX || a.originalEvent
									&& a.originalEvent.layerX)
									- h + 20, f.tooltipPos[1] = (a.layerY
									|| a.y || a.offsetY || a.originalEvent
									&& a.originalEvent.layerY)
									- l - 15, e.refresh(f)
					},
					mouseout : function() {
						var a = this.chart.tooltip;
						a && a.hide()
					}
				}
			};
			return function(e, o, m, t, q, D) {
				var A, J = m.trendStyle, z, E, ma, y, O, Q, Ca, ha, ub, ga, R, fa, kb, ca = parseInt(
						J.fontSize, 10)
						/ 2 + 2;
				if (m.showTrendlines != K) {
					A = 0;
					for (E = e.length; A < E; A += 1)
						if (e[A].line) {
							z = 0;
							for (ma = e[A].line.length; z < ma; z += 1)
								if (y = e[A].line[z], kb = y.allowdrag == "1", R = W(
										y.startvalue, y.value, 0), fa = W(
										y.endvalue, R), ub = D ? o : t
										&& y.parentyaxis
										&& a.test(y.parentyaxis) ? o[1] : o[0], Q = ub.max, O = ub.min, Q >= R
										&& Q >= fa && O <= R && O <= fa) {
									O = y.parentyaxis && a.test(y.parentyaxis)
											? l(y.valueonleft,
													m.trendlineValuesOnOpp) !== "1"
											: l(y.valueonright,
													m.trendlineValuesOnOpp) === "1";
									Q = Boolean(W(y.istrendzone, D ? 1 : 0));
									if (Ca = m.showTrendlinesLabels ? zb(l(
											y.displayvalue, m.numberFormatter[D
													? "xAxis"
													: "dataLabels"](R))) : h) {
										if (O = {
											text : Ca,
											textAlign : q ? "center" : O
													? "left"
													: "right",
											align : q ? Q ? "center" : R < fa
													? "right"
													: "left" : O
													? "right"
													: "left",
											verticalAlign : q ? "bottom" : Q
													? "middle"
													: Va[R > fa][O],
											rotation : 0,
											x : 0,
											y : q ? ca : 2,
											style : Tb(J)
										}, Ca = l(y.color, m.trendlineColor), y.alwaysVisible = Q, Ca)
											O.style.color = Ca.replace(B, "#")
									} else
										O = void 0;
									ha = l(y.tooltext);
									Ca = ha !== void 0 ? f(ha) : {};
									if (kb)
										Ca.drag = function() {
										};
									ga = W(y.thickness, m.trendlineThickness, 1);
									Q ? ub.plotBands.push({
										isTrend : !0,
										color : $(
												l(y.color, m.trendlineColor),
												l(y.alpha, m.trendlineAlpha, 40)),
										from : R,
										to : fa,
										label : O,
										zIndex : !m.is3d
												&& l(y.showontop,
														m.showTrendlinesOnTop) === "1"
												? 5
												: 3,
										events : Ca,
										tooltext : ha,
										alwaysVisible : y.alwaysVisible,
										dragable : kb
									})
											: ub.plotLines.push({
												isTrend : !0,
												color : $(
														l(
																y.color,
																m.trendlineColor,
																m.trendlineColor),
														l(
																y.alpha,
																m.trendlineAlpha,
																99)),
												value : R,
												to : fa,
												width : ga,
												dashStyle : l(y.dashed,
														m.trendlinesAreDashed) == "1"
														? ab(
																W(
																		y.dashlen,
																		m.trendlinesDashLen),
																W(
																		y.dashgap,
																		m.trendlinesDashGap),
																ga)
														: void 0,
												label : O,
												zIndex : !m.is3d
														&& l(
																y.showontop,
																m.showTrendlinesOnTop) === "1"
														? 5
														: 3,
												events : Ca,
												tooltext : ha,
												dragable : kb
											})
								}
						}
				}
			}
		}(), ab = function(a, e, f, h) {
			if (h || h === void 0)
				return f = f ? f : 1, W(a, 5) / f + "," + W(e, 3) / f
		}, Wa = function() {
		}, rb = function(a, e, f) {
			var h, l = rb[a];
			if (!l)
				l = function() {
				}, l.prototype = f instanceof Wa ? f : new Wa, l.prototype.constructor = l, l = rb[a] = new l;
			if (f)
				l.base = f;
			l.name = a;
			for (h in e)
				switch (typeof e[h]) {
					case "object" :
						if (e[h] instanceof Wa) {
							l[h] = e[h][h];
							break
						}
					default :
						l[h] = e[h];
						break;
					case "undefined" :
						delete l[h]
				}
			return this instanceof rb ? (a = function() {
			}, a.prototype = l, a.prototype.constructor = a, new a) : l
		};
		y.extend(y.hcLib, {
			BLANKSTRINGPLACEHOLDER : "#BLANK#",
			BLANKSTRING : h,
			COLOR_BLACK : "000000",
			COLOR_WHITE : "FFFFFF",
			COLOR_TRANSPARENT : "rgba(0,0,0,0)",
			HASHSTRING : "#",
			BREAKSTRING : "<br />",
			STRINGSTRING : "string",
			OBJECTSTRING : "object",
			COMMASTRING : ",",
			ZEROSTRING : K,
			SAMPLESTRING : "Ay0",
			TESTSTR : "Ag",
			ONESTRING : "1",
			DECIMALSTRING : z,
			STRINGUNDEFINED : "undefined",
			POSITION_TOP : "top",
			POSITION_RIGHT : "right",
			POSITION_BOTTOM : "bottom",
			POSITION_LEFT : "left",
			POSITION_CENTER : "center",
			POSITION_MIDDLE : "middle",
			FC_CONFIG_STRING : "_FCconf",
			HUNDREDSTRING : "100",
			PXSTRING : "px",
			COMMASPACE : ", ",
			regex : {
				stripWhitespace : e,
				dropHash : B,
				startsRGBA : a,
				cleanColorCode : f,
				breakPlaceholder : D,
				hexcode : /^#?[0-9a-f]{6}/i
			},
			extend2 : Tb,
			pluck : l,
			pluckNumber : W,
			getFirstDefinedValue : function() {
				var a, e, f;
				e = 0;
				for (f = arguments.length; e < f; e += 1)
					if ((a = arguments[e]) || !(a !== !1 && a !== 0 && a != h))
						return a
			},
			pluckFontSize : function() {
				var a, e, f;
				e = 0;
				for (f = arguments.length; e < f; e += 1)
					if ((a = arguments[e]) || !(a !== !1 && a !== 0))
						if (!isNaN(a = Number(a)))
							return a < 1 ? 1 : a;
				return 1
			},
			getValidValue : q,
			getDefinedColor : function(a, e) {
				return !a && a != 0 && a != !1 ? e : a
			},
			getFirstValue : ma,
			getFirstColor : function(a) {
				a = a.split(",")[0];
				a = a.replace(e, h);
				a == h && (a = "000000");
				return a.replace(B, "#")
			},
			getColorCodeString : function(a, e) {
				var f = "", h, l, o = 0, m = e.split(",");
				for (l = m.length; o < l; o += 1)
					h = m[o].split("-"), f += h.length === 2
							? h[0].indexOf("dark") !== "-1" ? La(a, 100
											- parseInt(h[1], 10))
									+ "," : ha(a, 100 - parseInt(h[1], 10))
									+ ","
							: m[o] + ",";
				return f.substring(0, f.length - 1)
			},
			pluckColor : function(a) {
				if (q(a))
					return a = a.split(",")[0], a = a.replace(e, h), a == h
							&& (a = "000000"), a.replace(B, "#")
			},
			getFirstAlpha : function(a) {
				a = parseInt(a, 10);
				if (isNaN(a) || a > 100 || a < 0)
					a = 100;
				return a
			},
			parsePointValue : m,
			parseUnsafeString : zb,
			toPrecision : function(a, e) {
				var f = A(10, e);
				return Math.round(a * f) / f
			},
			stubFN : function() {
			},
			falseFN : function() {
				return !1
			},
			hasSVG : t,
			isIE : Ta,
			getLinkAction : function(a, e) {
				return function() {
					var f, o, m, t, q;
					t = window;
					q = ma(this.link, h);
					q = l(q, this.options && this.options.chart
									&& this.options.chart.link || h,
							this.series && this.series.chart
									&& this.series.chart.options
									&& this.series.chart.options.chart
									&& this.series.chart.options.chart.link
									|| h);
					if (q !== void 0)
						switch (q = t.decodeURIComponent(q).replace(/^\s+/, h)
								.replace(/\s+$/, h), q
								.search(/^[a-z]*\s*[\-\:]\s*/i) !== -1
								&& (f = q.split(/\s*[\-\:]\s*/)[0]
										.toUpperCase()), f) {
							case "J" :
								q = q.replace(/^j\s*\-/i, "j-");
								f = q.indexOf("-", 2);
								if (f === -1)
									try {
										eval(q.slice(2))
									} catch (A) {
									}
								else
									try {
										t[q.substr(2, f - 2).replace(/\s/g, h)](q
												.slice(f + 1))
									} catch (D) {
									}
								break;
							case "JAVASCRIPT" :
								q = q.replace(/^JAVASCRIPT\s*\:/i,
										"javascript:");
								try {
									eval(q.slice(11))
								} catch (J) {
								}
								break;
							case "N" :
								q.replace(/^n\s*\-/i, "n-");
								t.open(q.slice(2));
								break;
							case "F" :
								q = q.replace(/^f\s*\-/i, "f-");
								f = q.indexOf("-", 2);
								f !== -1 ? (o = q.substr(2, f - 2))
										&& t.frames[o]
										? t.frames[o].location = q.slice(f + 1)
										: t.open(q.slice(f + 1), o) : t.open(q
										.slice(2));
								break;
							case "P" :
								q = q.replace(/p\s*\-/i, "p-");
								f = q.indexOf("-", 2);
								o = q.indexOf(",", 2);
								f === -1 && (f = 1);
								m = q.slice(f + 1);
								t.open(m, q.substr(2, o - 2),
										q.substr(o + 1, f - o - 1)).focus();
								break;
							case "NEWCHART" :
								f = q.indexOf("-", 9);
								t = q.substring(9, f).toUpperCase();
								if (t == "XMLURL")
									o = q.substring(f + 1, q.length);
								else if (t == "JSONURL")
									o = q.substring(f + 1, q.length);
								else if (t == "XML" || t == "JSON") {
									q = q.substring(f + 1, q.length);
									t = {
										chart : {}
									};
									FcJSON = a;
									q = q.toLowerCase();
									if (FcJSON.linkeddata)
										for (f = 0; f < FcJSON.linkeddata.length; f += 1)
											if (FcJSON.linkeddata[f].id
													.toLowerCase() === q)
												t = FcJSON.linkeddata[f].linkedchart;
									o = t;
									t = "JSON"
								}
								y.raiseEvent("LinkedChartInvoked", {
											linkType : t,
											data : o
										}, e);
								break;
							default :
								t.location.href = q
						}
				}
			},
			graphics : {
				parseAlpha : kb,
				convertColor : $,
				getDarkColor : ha,
				getLightColor : La,
				mapSymbolName : function(a, f) {
					var e = vb.circle, a = m(a);
					a >= 3 && (e = (f ? vb.spoke : vb.poly) + a);
					return e
				},
				getColumnColor : function(a, f, e, h, l, o, q, m, t) {
					var A, D;
					A = a.split(",");
					D = f.split(",");
					o = o.split(",");
					q = q.split(",");
					t ? m = {
						FCcolor : {
							color : A[0],
							alpha : D[0]
						}
					} : l ? (a = A[0], D = D[0], m = {
						FCcolor : {
							color : ha(a, 75) + "," + La(a, 25) + ","
									+ ha(a, 80) + "," + La(a, 65) + ","
									+ ha(a, 80),
							alpha : D + "," + D + "," + D + "," + D + "," + D,
							ratio : "0,10,13,57,20",
							angle : m ? "-180" : "0"
						}
					}, o = [ha(a, 70)]) : (f = kb(f, A.length), m = {
						FCcolor : {
							color : a,
							alpha : f,
							ratio : e,
							angle : m ? 180 - h : h
						}
					});
					return [m, {
								FCcolor : {
									color : o[0],
									alpha : q[0]
								}
							}]
				},
				getAngle : function(a, f, e) {
					a = Math.atan(f / a) * 180 / Math.PI;
					e == 2 ? a = 180 - a : e == 3 ? a += 180 : e == 4
							&& (a = 360 - a);
					return a
				},
				parseColor : function(a) {
					return a.replace(f, h).replace(B, "#")
				}
			},
			setImageDisplayMode : function(a, f, e, h, l, o, q, m) {
				var t = m.width * (h / 100), h = m.height * (h / 100), m = {}, D, A = o
						- l * 2;
				D = q - l * 2;
				var J = function(a, f, e, h, o, m) {
					var q = {};
					switch (a) {
						case "top" :
							q.y = l;
							break;
						case "bottom" :
							q.y = m - h - l;
							break;
						case "middle" :
							q.y = (m - h) / 2
					}
					switch (f) {
						case "left" :
							q.x = l;
							break;
						case "right" :
							q.x = o - e - l;
							break;
						case "middle" :
							q.x = (o - e) / 2
					}
					return q
				};
				switch (a) {
					case "center" :
						m.width = t;
						m.height = h;
						m.y = q / 2 - h / 2;
						m.x = o / 2 - t / 2;
						break;
					case "stretch" :
						m.width = o - l * 2;
						m.height = q - l * 2;
						m.y = l;
						m.x = l;
						break;
					case "tile" :
						m.width = t;
						m.height = h;
						m.tileInfo = {};
						m.tileInfo.xCount = a = Math.ceil(A / t);
						m.tileInfo.yCount = D = Math.ceil(D / h);
						alignObj = J(f, e, t * a, h * D, o, q);
						m.y = alignObj.y;
						m.x = alignObj.x;
						break;
					case "fit" :
						a = t / h > A / D ? A / t : D / h;
						m.width = t * a;
						m.height = h * a;
						alignObj = J(f, e, m.width, m.height, o, q);
						m.y = alignObj.y;
						m.x = alignObj.x;
						break;
					case "fill" :
						a = t / h > A / D ? D / h : A / t;
						m.width = t * a;
						m.height = h * a;
						alignObj = J(f, e, m.width, m.height, o, q);
						m.y = alignObj.y;
						m.x = alignObj.x;
						break;
					default :
						alignObj = J(f, e, t, h, o, q), m.width = t, m.height = h, m.y = alignObj.y, m.x = alignObj.x
				}
				return m
			},
			SmartLabelManager : Ua,
			setLineHeight : Xa,
			NumberFormatter : E,
			getAxisLimits : O,
			createTrendLine : hb,
			getDashStyle : ab,
			axisLabelAdder : Q,
			chartAPI : rb,
			createDialog : fa,
			defaultPaletteOptions : {
				bgColor : ["CBCBCB,E9E9E9", "CFD4BE,F3F5DD", "C5DADD,EDFBFE",
						"A86402,FDC16D", "FF7CA0,FFD1DD"],
				bgAngle : [270, 270, 270, 270, 270],
				bgRatio : ["0,100", "0,100", "0,100", "0,100", "0,100"],
				bgAlpha : ["50,50", "60,50", "40,20", "20,10", "30,30"],
				canvasBgColor : ["FFFFFF", "FFFFFF", "FFFFFF", "FFFFFF",
						"FFFFFF"],
				canvasBgAngle : [0, 0, 0, 0, 0],
				canvasBgAlpha : ["100", "100", "100", "100", "100"],
				canvasBgRatio : [h, h, h, h, h],
				canvasBorderColor : ["545454", "545454", "415D6F", "845001",
						"68001B"],
				canvasBorderAlpha : [100, 100, 100, 90, 100],
				showShadow : [0, 1, 1, 1, 1],
				divLineColor : ["717170", "7B7D6D", "92CDD6", "965B01",
						"68001B"],
				divLineAlpha : [40, 45, 65, 40, 30],
				altHGridColor : ["EEEEEE", "D8DCC5", "99C4CD", "DEC49C",
						"FEC1D0"],
				altHGridAlpha : [50, 35, 10, 20, 15],
				altVGridColor : ["767575", "D8DCC5", "99C4CD", "DEC49C",
						"FEC1D0"],
				altVGridAlpha : [10, 20, 10, 15, 10],
				anchorBgColor : ["FFFFFF", "FFFFFF", "FFFFFF", "FFFFFF",
						"FFFFFF"],
				toolTipBgColor : ["FFFFFF", "FFFFFF", "FFFFFF", "FFFFFF",
						"FFFFFF"],
				toolTipBorderColor : ["545454", "545454", "415D6F", "845001",
						"68001B"],
				baseFontColor : ["555555", "60634E", "025B6A", "A15E01",
						"68001B"],
				borderColor : ["767575", "545454", "415D6F", "845001", "68001B"],
				borderAlpha : [50, 50, 50, 50, 50],
				legendBgColor : ["FFFFFF", "FFFFFF", "FFFFFF", "FFFFFF",
						"FFFFFF"],
				legendBorderColor : ["545454", "545454", "415D6F", "845001",
						"D55979"],
				plotGradientColor : ["FFFFFF", "FFFFFF", "FFFFFF", "FFFFFF",
						"FFFFFF"],
				plotBorderColor : ["333333", "8A8A8A", "FFFFFF", "FFFFFF",
						"FFFFFF"],
				plotFillColor : ["767575", "D8DCC5", "99C4CD", "DEC49C",
						"FEC1D0"],
				bgColor3D : ["FFFFFF", "FFFFFF", "FFFFFF", "FFFFFF", "FFFFFF"],
				bgAlpha3D : ["100", "100", "100", "100", "100"],
				bgAngle3D : [90, 90, 90, 90, 90],
				bgRatio3D : [h, h, h, h, h],
				canvasBgColor3D : ["DDE3D5", "D8D8D7", "EEDFCA", "CFD2D8",
						"FEE8E0"],
				canvasBaseColor3D : ["ACBB99", "BCBCBD", "C8A06C", "96A4AF",
						"FAC7BC"],
				divLineColor3D : ["ACBB99", "A4A4A4", "BE9B6B", "7C8995",
						"D49B8B"],
				divLineAlpha3D : [100, 100, 100, 100, 100],
				legendBgColor3D : ["F0F3ED", "F3F3F3", "F7F0E8", "EEF0F2",
						"FEF8F5"],
				legendBorderColor3D : ["C6CFB8", "C8C8C8", "DFC29C", "CFD5DA",
						"FAD1C7"],
				toolTipbgColor3D : ["FFFFFF", "FFFFFF", "FFFFFF", "FFFFFF",
						"FFFFFF"],
				toolTipBorderColor3D : ["49563A", "666666", "49351D", "576373",
						"681C09"],
				baseFontColor3D : ["49563A", "4A4A4A", "49351D", "48505A",
						"681C09"],
				anchorBgColor3D : ["FFFFFF", "FFFFFF", "FFFFFF", "FFFFFF",
						"FFFFFF"]
			}
		})
	}
})();
(function(y) {
	y.fn.drag = function(a, f, e) {
		var h = typeof a == "string" ? a : "", t = y.isFunction(a) ? a : y
				.isFunction(f) ? f : null;
		h.indexOf("drag") !== 0 && (h = "drag" + h);
		e = (a == t ? f : e) || {};
		return t ? this.bind(h, e, t) : this.trigger(h)
	};
	var h = y.event, K = "ontouchstart" in document.documentElement, z = K
			? "touchstart"
			: "mousedown", t = K ? "touchmove touchend" : "mousemove mouseup", Ta = function(
			a, f) {
		if (!f.touchXY || !a.originalEvent)
			return a;
		var e = a.originalEvent.changedTouches || a.originalEvent.touches;
		e && e.length && y.extend(a, e[0]);
		return a
	}, e = h.special, B = e.drag = {
		defaults : {
			which : 1,
			distance : 0,
			not : ":input",
			handle : null,
			relative : !1,
			drop : !1,
			click : !1,
			touchXY : !0
		},
		datakey : "dragdata",
		livekey : "livedrag",
		add : function(a) {
			var e = y.data(this, B.datakey), t = a.data || {};
			e.related += 1;
			if (!e.live && a.selector)
				e.live = !0, h.add(this, "draginit." + B.livekey, B.delegate);
			y.each(B.defaults, function(a) {
						t[a] !== void 0 && (e[a] = t[a])
					})
		},
		remove : function() {
			y.data(this, B.datakey).related -= 1
		},
		setup : function() {
			if (!y.data(this, B.datakey)) {
				var a = y.extend({
							related : 0
						}, B.defaults);
				y.data(this, B.datakey, a);
				h.add(this, z, B.init, a);
				this.attachEvent&& this.attachEvent("ondragstart", B.dontstart)
			}
		},
		teardown : function() {
			y.data(this, B.datakey).related
					|| (y.removeData(this, B.datakey), h
							.remove(this, z, B.init), h.remove(this,
							"draginit", B.delegate), B.textselect(!0), this.detachEvent
							&& this.detachEvent("ondragstart", B.dontstart))
		},
		init : function(a) {
			var f = a.data, D;
			if ((D = a.originalEvent ? a.originalEvent.changedTouches
					|| a.originalEvent.touches : [])
					&& D.length) {
				if (D.length > 1)
					return
			} else if (f.which > 0 && a.which != f.which)
				return;
			if (!y(a.target).is(f.not)
					&& (!f.handle || y(a.target).closest(f.handle,
							a.currentTarget).length))
				if (f.propagates = 1, f.interactions = [B.interaction(this, f)], f.target = a.target, f.pageX = a.pageX, f.pageY = a.pageY, f.dragging = null, D = B
						.hijack(a, "draginit", f), f.propagates) {
					if ((D = B.flatten(D)) && D.length)
						f.interactions = [], y.each(D, function() {
									f.interactions.push(B.interaction(this, f))
								});
					f.propagates = f.interactions.length;
					f.drop !== !1 && e.drop && e.drop.handler(a, f);
					B.textselect(!1);
					h.add(document, t, B.handler, f);
					if (!K)
						return !1
				}
		},
		interaction : function(a, e) {
			return {
				drag : a,
				callback : new B.callback,
				droppable : [],
				offset : y(a)[e.relative ? "position" : "offset"]() || {
					top : 0,
					left : 0
				}
			}
		},
		handler : function(a) {
			var f = a.data;
			if (!f.dragging
					&& (a.type === "mousemove" || a.type === "touchmove")) {
				if (Math.pow(a.pageX - f.pageX, 2)
						+ Math.pow(a.pageY - f.pageY, 2) < Math.pow(f.distance,
						2))
					return;
				a.target = f.target;
				B.hijack(a, "dragstart", f);
				if (f.propagates)
					f.dragging = !0
			}
			switch (a.type) {
				case "touchmove" :
					f.dragging && (a.preventDefault(), Ta(a, f));
				case "mousemove" :
					if (f.dragging) {
						B.hijack(a, "drag", f);
						if (f.propagates) {
							f.drop !== !1 && e.drop && e.drop.handler(a, f);
							break
						}
						a.type = "mouseup"
					}
				case "mouseup" :
				case "touchend" :
					if (h.remove(document, t, B.handler), f.dragging
							&& (f.drop !== !1 && e.drop && e.drop.handler(a, f), B
									.hijack(a, "dragend", f)), B.textselect(!0), f.click === !1
							&& f.dragging)
						jQuery.event.triggered = !0, setTimeout(function() {
									jQuery.event.triggered = !1
								}, 20), f.dragging = !1
			}
		},
		delegate : function(a) {
			var e = [], t, o = y.data(this, "events") || {};
			y.each(o.live || [], function(o, J) {
						if (J.preType.indexOf("drag") === 0
								&& (t = y(a.target).closest(J.selector,
										a.currentTarget)[0]))
							h.add(t, J.origType + "." + B.livekey,
									J.origHandler, J.data), y.inArray(t, e) < 0
									&& e.push(t)
					});
			if (!e.length)
				return !1;
			return y(e).bind("dragend." + B.livekey, function() {
						h.remove(this, "." + B.livekey)
					})
		},
		hijack : function(a, e, t, o, A) {
			if (t) {
				var J = {
					event : a.originalEvent,
					type : a.type
				}, q = e.indexOf("drop") ? "drag" : "drop", z, l = o || 0, W, m, o = !isNaN(o)
						? o
						: t.interactions.length;
				a.type = e;
				a.sourceEvent = J.event;
				a.originalEvent = null;
				t.results = [];
				do
					if ((W = t.interactions[l])
							&& !(e !== "dragend" && W.cancelled)) {
						m = B.properties(a, t, W);
						W.results = [];
						y(A || W[q] || t.droppable).each(function(l, o) {
							z = (m.target = o) ? h.handle.call(o, a, m) : null;
							if (z === !1) {
								if (q == "drag")
									W.cancelled = !0, t.propagates -= 1;
								e == "drop" && (W[q][l] = null)
							} else
								e == "dropinit"
										&& W.droppable.push(B.element(z) || o);
							if (e == "dragstart")
								W.proxy = y(B.element(z) || W.drag)[0];
							W.results.push(z);
							delete a.result;
							if (e !== "dropinit")
								return z
						});
						t.results[l] = B.flatten(W.results);
						if (e == "dropinit")
							W.droppable = B.flatten(W.droppable);
						e == "dragstart" && !W.cancelled && m.update()
					}
				while (++l < o);
				a.type = J.type;
				a.originalEvent = J.event;
				return B.flatten(t.results)
			}
		},
		properties : function(a, e, h) {
			var o = h.callback;
			o.drag = h.drag;
			o.proxy = h.proxy || h.drag;
			o.startX = e.pageX;
			o.startY = e.pageY;
			o.deltaX = a.pageX - e.pageX;
			o.deltaY = a.pageY - e.pageY;
			o.originalX = h.offset.left;
			o.originalY = h.offset.top;
			o.offsetX = a.pageX - (e.pageX - o.originalX);
			o.offsetY = a.pageY - (e.pageY - o.originalY);
			o.drop = B.flatten((h.drop || []).slice());
			o.available = B.flatten((h.droppable || []).slice());
			return o
		},
		element : function(a) {
			if (a && (a.jquery || a.nodeType == 1))
				return a
		},
		flatten : function(a) {
			return y.map(a, function(a) {
						return a && a.jquery ? y.makeArray(a) : a && a.length
								? B.flatten(a)
								: a
					})
		},
		textselect : function(a) {
			y(document)[a ? "unbind" : "bind"]("selectstart", B.dontstart)
					.attr("unselectable", a ? "off" : "on").css(
							"MozUserSelect", a ? "" : "none")
		},
		dontstart : function() {
			return !1
		},
		callback : function() {
		}
	};
	B.callback.prototype = {
		update : function() {
			e.drop && this.available.length
					&& y.each(this.available, function(a) {
								e.drop.locate(this, a)
							})
		}
	};
	e.draginit = e.dragstart = e.dragend = B
})(jQuery);
(function(y) {
	function h(h) {
		var t = h || window.event, K = [].slice.call(arguments, 1), e = 0, B = 0, a = 0, h = y.event
				.fix(t);
		h.type = "wheelchange";
		h.wheelDelta && (e = h.wheelDelta / 120);
		h.detail && (e = -h.detail / 3);
		a = e;
		t.axis !== void 0 && t.axis === t.HORIZONTAL_AXIS
				&& (a = 0, B = -1 * e);
		t.wheelDeltaY !== void 0 && (a = t.wheelDeltaY / 120);
		t.wheelDeltaX !== void 0 && (B = -1 * t.wheelDeltaX / 120);
		K.unshift(h, e, B, a);
		return y.event.handle.apply(this, K)
	}
	var K = ["DOMMouseScroll", "mousewheel"];
	y.event.special.wheelchange = {
		setup : function() {
			if (this.addEventListener)
				for (var z = K.length; z;)
					this.addEventListener(K[--z], h, !1);
			else
				this.onmousewheel = h
		},
		teardown : function() {
			if (this.removeEventListener)
				for (var z = K.length; z;)
					this.removeEventListener(K[--z], h, !1);
			else
				this.onmousewheel = null
		}
	};
	y.fn.extend({
				wheelchange : function(h) {
					return h ? this.bind("wheelchange", h) : this
							.trigger("wheelchange")
				},
				unwheelchange : function(h) {
					return this.unbind("wheelchange", h)
				}
			})
})(jQuery);
(function() {
	var y = CnbiSoft(["private", "modules.renderer.highcharts-interface"]);
	if (y !== void 0) {
		var h = y.hcLib, K = y.renderer.getRenderer("javascript"), z = h.hasModule, t = h.loadModule, Ta = h.moduleCmdQueue, e = h.executeWaitingCommands, B = h.moduleDependencies, a = h.getDependentModuleName, f = h.eventList = {
			loaded : "FC_Loaded",
			dataloaded : "FC_DataLoaded",
			rendered : "FC_Rendered",
			drawcomplete : "FC_DrawComplete",
			resized : "FC_Resized",
			dataxmlinvalid : "FC_DataXMLInvalid",
			nodatatodisplay : "FC_NoDataToDisplay"
		};
		h.raiseEvent = function(a, e, h, t) {
			var q = f[a];
			y.raiseEvent(a, e, h);
			q && typeof window[q] === "function" && setTimeout(function() {
						window[q].apply(window, t)
					}, 0)
		};
		B.charts = y.extend(B.charts || {}, {
					column2d : 0,
					column3d : 0,
					pie2d : 0,
					pie3d : 0,
					line : 0,
					bar2d : 0,
					area2d : 0,
					doughnut2d : 0,
					doughnut3d : 0,
					pareto2d : 0,
					pareto3d : 0,
					mscolumn2d : 0,
					mscolumn3d : 0,
					msline : 0,
					msarea : 0,
					msbar2d : 0,
					msbar3d : 0,
					stackedcolumn2d : 0,
					marimekko : 0,
					stackedcolumn3d : 0,
					stackedarea2d : 0,
					stackedcolumn2dline : 0,
					stackedcolumn3dline : 0,
					stackedbar2d : 0,
					stackedbar3d : 0,
					msstackedcolumn2d : 0,
					mscombi2d : 0,
					mscombi3d : 0,
					mscolumnline3d : 0,
					mscombidy2d : 0,
					mscolumn3dlinedy : 0,
					stackedcolumn3dlinedy : 0,
					msstackedcolumn2dlinedy : 0,
					scatter : 0,
					bubble : 0,
					ssgrid : 0,
					scrollcolumn2d : 0,
					scrollcolumn3d : 0,
					scrollline2d : 0,
					scrollarea2d : 0,
					scrollstackedcolumn2d : 0,
					scrollcombi2d : 0,
					scrollcombidy2d : 0,
					zoomline : 0
				});
		B.powercharts = y.extend(B.powercharts || {}, {
					spline : 0,
					splinearea : 0,
					msspline : 0,
					mssplinearea : 0,
					multiaxisline : 0,
					multilevelpie : 0,
					waterfall2d : 0,
					msstepline : 0,
					inversemsline : 0,
					inversemscolumn2d : 0,
					inversemsarea : 0,
					errorbar2d : 0,
					horizontalerrorbar2d : 0,
					errorscatter : 0,
					errorline : 0,
					logmsline : 0,
					logmscolumn2d : 0,
					radar : 0,
					dragnode : 0,
					candlestick : 0,
					selectscatter : 0,
					dragcolumn2d : 0,
					dragline : 0,
					dragarea : 0,
					boxandwhisker2d : 0,
					kagi : 0
				});
		B.widgets = y.extend(B.widgets || {}, {
					angulargauge : 0,
					bulb : 0,
					cylinder : 0,
					drawingpad : 0,
					funnel : 0,
					hbullet : 0,
					hled : 0,
					hlineargauge : 0,
					vlineargauge : 0,
					pyramid : 0,
					realtimearea : 0,
					realtimecolumn : 0,
					realtimeline : 0,
					realtimelinedy : 0,
					realtimestackedarea : 0,
					realtimestackedcolumn : 0,
					sparkcolumn : 0,
					sparkline : 0,
					sparkwinloss : 0,
					thermometer : 0,
					vbullet : 0,
					vled : 0
				});
		B.maps = y.extend(B.maps || {}, {});
		y.extend(K, {
			render : function(e, f) {
				var t = this.chartType(), J = this.jsVars, q;
				q = J.isMap === !0 ? ["maps"] : a(t);
				J.hcObj && J.hcObj.destroy && J.hcObj.destroy();
				q.length
						? h.chartAPI[t]
								? (this.__state.lastRenderedSrc = this.src, delete J.waitingModule, y.hcLib
										.createChart(this, e, t, f))
								: z(q)
										? (y
												.raiseError(
														this,
														11112822001,
														"run",
														"HC-interface~renderer.render",
														"Chart runtimes not loaded even when resource is present"), y.hcLib
												.createChart(
														this,
														e,
														"stub",
														void 0,
														J.msgStore.ChartNotSupported))
										: (Ta[q[q.length - 1]].push({
													cmd : "render",
													obj : this,
													args : arguments
												}), J.waitingModule
												|| (y.hcLib.createChart(this,
														e, "stub", void 0,
														J.msgStore.LoadingText), K.load
														.apply(this)))
						: y.hcLib.createChart(this, e, "stub", void 0,
								J.msgStore.ChartNotSupported)
			},
			update : function(a) {
				var e = this.ref, f = this.jsVars;
				f.hcObj && f.hcObj.destroy && f.hcObj.destroy();
				a.error === void 0
						? (delete f.stallLoad, delete f.loadError, this
								.isActive()
								&& (this.src !== this.__state.lastRenderedSrc
										? this.render()
										: y.hcLib.createChart(this,
												f.container, f.type)))
						: (this.isActive()
								&& typeof e.showChartMessage === "function"
								&& e.showChartMessage("InvalidXMLText"), delete f.loadError)
			},
			resize : function(a) {
				var e = this.ref, f, h = this.jsVars;
				if (e && e.resize) {
					if (h.isResizing)
						h.isResizing = clearTimeout(h.isResizing);
					h.isResizing = setTimeout(function() {
								f = y.normalizeCSSDimension(a.width, a.height,
										e);
								if (a.width !== void 0)
									e.style.width = f.width;
								if (a.height !== void 0)
									e.style.height = f.height;
								e.resize();
								delete h.isResizing
							}, 0)
				}
			},
			dispose : function() {
				var a;
				a = this.jsVars;
				var e = a.hcObj || {};
				a.instanceAPI && a.instanceAPI.dispose
						&& a.instanceAPI.dispose();
				if (a = this.ref)
					y.purgeDOM(a), a.parentNode && a.parentNode.removeChild(a);
				return e && e.destroy && e.destroy()
			},
			load : function() {
				var f = this, o = f.jsVars, A = f.chartType(), J = y.hcLib.chartAPI[A], A = a(A), q = A[A.length
						- 1];
				if (J || !A || A && A.length === 0)
					delete o.waitingModule;
				else if (!o.waitingModule)
					o.waitingModule = !0, t(A, function() {
								delete o.waitingModule;
								e(h.moduleCmdQueue[q] || [])
							}, function(a) {
								y.raiseError(f, "11171116151", "run",
										"HC-interface~renderer.load",
										"Unable to load required modules and resources: "
												+ a)
							}, f), o.moduleLoadRequested = !0
			},
			config : function(a) {
				var e, f = this.jsVars, h = f.msgStore, f = f.cfgStore;
				for (e in a)
					h[e] ? h[e] = a[e] : f[e.toLowerCase()] = a[e]
			}
		})
	}
})();
(function() {
	function y(b, k, a, u, I, d, g) {
		var c = [Aa], j = mb(typeof d.color === "string"
				? d.color
				: d.color.FCcolor.color), e, p;
		p = g.box.tagName && g.box.tagName.toLowerCase() === "div";
		j = j.replace(Wa, "");
		e = Va(j, 40);
		g = fa(j, 60).replace(Wa, ub);
		j = {
			FCcolor : {
				color : j + "," + j + "," + e + "," + j + "," + j,
				ratio : "0,30,30,30,10",
				angle : 0,
				alpha : "100,100,100,100,100"
			}
		};
		switch (I) {
			case "column" :
			case "column3d" :
				d = parseInt(a * 25) / 100;
				e = parseInt(d * 50) / 100;
				I = parseInt(u * 30) / 100;
				p = parseInt(u * 60) / 100;
				c = c.concat([b, k + u, ra, b, k + I, b + d, k + I, b + d,
						k + u, b + d + e, k + u, b + d + e, k, b + d + d + e,
						k, b + d + d + e, k + u, b + d + d + e + e, k + u,
						b + d + d + e + e, k + p, b + a, k + p, b + a, k + u,
						"Z"]);
				j.FCcolor.angle = 270;
				break;
			case "bar" :
			case "bar3d" :
				d = a * 0.3;
				e = a * 0.6;
				I = u / 4;
				p = I / 2;
				c = c.concat([b, k, ra, b + e, k, b + e, k + I, b, k + I, b,
						k + I + p, b + a, k + I + p, b + a, k + I + p + I, b,
						k + 2 * I + p, b, k + 2 * (I + p), b + d,
						k + 2 * (I + p), b + d, k + u, b, k + u, "Z"]);
				break;
			case "area" :
			case "area3d" :
				I = u * 0.6;
				p = u * 0.2;
				u *= 0.8;
				c = c.concat([b, k + u, ra, b, k + I, b + a * 0.3, k + p,
						b + a * 0.6, k + I, b + a, k + p, b + a, k + u, "Z"]);
				j.FCcolor.angle = 270;
				break;
			case "pie" :
			case "pie3d" :
				d = a / 2;
				e = a * 0.7;
				I = u / 2;
				c = p ? c.concat([b + d, k + I, ra, b + e, k, "at", b, k,
						b + a, k + u, b + e, k, b, k + I, ra, b + d, k + I, Aa,
						b + d, k + I, ra, b, k + I, "at", b, k, b + a, k + u,
						b, k + I, b + e, k + u, ra, b + d, k + I, Aa, b + d,
						k + I, ra, b + e, k + u, "at", b, k, b + a, k + u,
						b + e, k + u, b + e, k, "Z"]) : c.concat([b + d, k + I,
						ra, b + e, k, "A", d, I, 0, 0, 0, b, k + I, ra, b + d,
						k + I, Aa, b + d, k + I, ra, b, k + I, "A", d, I, 0, 0,
						0, b + e, k + u, ra, b + d, k + I, Aa, b + d, k + I,
						ra, b + e, k + u, "A", d + 1, I + 1, 0, 0, 0, b + e, k,
						"Z"]);
				break;
			case "boxandwhisker2d" :
				c = c.concat([b, k, ra, b + a, k, b + a, k + u, b, k + u, "Z"]);
				j = d.color;
				g = "#000000";
				break;
			default :
				c = c.concat([b, k, ra, b + a, k, b + a, k + u, b, k + u, "Z"]), j.FCcolor.angle = 270, j.FCcolor.ratio = "0,70,30"
		}
		return {
			path : c,
			color : j,
			strokeWidth : 0.5,
			strokeColor : g
		}
	}
	function h(b, k) {
		var a;
		b || (b = {});
		for (a in k)
			b[a] = k[a];
		return b
	}
	function K(b, k) {
		return parseInt(b, k || 10)
	}
	function z(b) {
		return typeof b === "string"
	}
	function t(b) {
		return typeof b === "object"
	}
	function Ta(b) {
		return typeof b === "number"
	}
	function e(b) {
		return ga.log(b) / ga.LN10
	}
	function B(b, k) {
		for (var a = b.length; a--;)
			if (b[a] === k) {
				b.splice(a, 1);
				break
			}
	}
	function a(b) {
		return b !== C && b !== null
	}
	function f(b, k, x) {
		var u, I;
		if (z(k))
			a(x) ? b.setAttribute(k, x) : b && b.getAttribute
					&& (I = b.getAttribute(k));
		else if (a(k) && t(k))
			for (u in k)
				b.setAttribute(u, k[u]);
		return I
	}
	function D(b) {
		return Object.prototype.toString.call(b) === "[object Array]" ? b : [b]
	}
	function o() {
		var b = arguments, k, a, u = b.length;
		for (k = 0; k < u; k++)
			if (a = b[k], typeof a !== "undefined" && a !== null)
				return a;
		return C
	}
	function A(b, k) {
		if (d && k && k.opacity !== C)
			k.filter = "alpha(opacity=" + k.opacity * 100 + ")";
		h(b.style, k)
	}
	function J(b, k, a, u, I) {
		b = Qa.createElement(b);
		k && h(b, k);
		I && A(b, {
					padding : 0,
					border : T,
					margin : 0
				});
		a && A(b, a);
		u && u.appendChild(b);
		return b
	}
	function q(b, k) {
		var a = function() {
		};
		a.prototype = new b;
		h(a.prototype, k);
		return a
	}
	function ma(b, k, a, u) {
		var I = r.lang, d = isNaN(k = Da(k)) ? 2 : k, k = a === void 0
				? I.decimalPoint
				: a, u = u === void 0 ? I.thousandsSep : u, I = b < 0
				? "-"
				: "", a = String(K(b = Da(+b || 0).toFixed(d))), c = a.length > 3
				? a.length % 3
				: 0;
		return I + (c ? a.substr(0, c) + u : "")
				+ a.substr(c).replace(/(\d{3})(?=\d)/g, "$1" + u)
				+ (d ? k + Da(b - a).toFixed(d).slice(2) : "")
	}
	function l(b) {
		for (var k = {
			left : b.offsetLeft,
			top : b.offsetTop
		}, b = b.offsetParent; b;)
			k.left += b.offsetLeft, k.top += b.offsetTop, b !== Qa.body
					&& b !== Qa.documentElement
					&& (k.left -= b.scrollLeft, k.top -= b.scrollTop), b = b.offsetParent;
		return k
	}
	function W() {
		this.symbol = this.color = 0
	}
	function m(b, k, a, u, d, c, g) {
		var j = g.x, g = g.y, e = j - b + a - 25, p = g - k + u + 10, f;
		e < 7 && (e = a + j + 15);
		e + b > a + d && (e -= e + b - (a + d), p -= k, f = !0);
		p < 5
				? (p = 5, f && g >= p && g <= p + k && (p = g + k - 5))
				: p + k > u + c && (p = u + c - k - 5);
		return {
			x : e,
			y : p
		}
	}
	function zb(b, k) {
		var a = b.length, u;
		for (u = 0; u < a; u++)
			b[u].ss_i = u;
		b.sort(function(b, a) {
					var x = k(b, a);
					return x === 0 ? b.ss_i - a.ss_i : x
				});
		for (u = 0; u < a; u++)
			delete b[u].ss_i
	}
	function Ca(b) {
		for (var k = b.length, a = b[0]; k--;)
			b[k] < a && (a = b[k]);
		return a
	}
	function Tb(b) {
		for (var k = b.length, a = b[0]; k--;)
			b[k] > a && (a = b[k]);
		return a
	}
	function Bb(b) {
		for (var k in b)
			b[k] && b[k].destroy && b[k].destroy(), delete b[k]
	}
	function kb(b, k) {
		xa = o(b, k.animation)
	}
	function $() {
		var b = r.global.useUTC;
		sc = b ? Date.UTC : function(b, a, u, d, c, g) {
			return (new Date(b, a, o(u, 1), o(d, 0), o(c, 0), o(g, 0)))
					.getTime()
		};
		Ec = b ? "getUTCMinutes" : "getMinutes";
		L = b ? "getUTCHours" : "getHours";
		Y = b ? "getUTCDay" : "getDay";
		oc = b ? "getUTCDate" : "getDate";
		tc = b ? "getUTCMonth" : "getMonth";
		tb = b ? "getUTCFullYear" : "getFullYear";
		Lc = b ? "setUTCMinutes" : "setMinutes";
		Mc = b ? "setUTCHours" : "setHours";
		Fc = b ? "setUTCDate" : "setDate";
		Nc = b ? "setUTCMonth" : "setMonth";
		Oc = b ? "setUTCFullYear" : "setFullYear"
	}
	function ha(b) {
		ua || (ua = J(Ja));
		b && ua.appendChild(b);
		ua.innerHTML = ""
	}
	function La() {
	}
	function vb(b, k) {
		function x(b) {
			function k(b, a) {
				this.pos = b;
				this.minor = a;
				this.isNew = !0;
				a || this.addLabel()
			}
			function x(b) {
				if (b)
					this.options = b, this.id = b.id;
				return this
			}
			function u(b, k, a, x) {
				this.isNegative = k;
				this.options = b;
				this.x = a;
				this.stack = x;
				this.alignOptions = {
					align : b.align || (Za ? k ? "left" : "right" : "center"),
					verticalAlign : b.verticalAlign
							|| (Za ? "middle" : k ? "bottom" : "top"),
					y : o(b.y, Za ? 4 : k ? 14 : -6),
					x : o(b.x, Za ? k ? -6 : 6 : 0)
				};
				this.textAlign = b.textAlign
						|| (Za ? k ? "right" : "left" : "center")
			}
			function d() {
				var b = [], k = [], x;
				Ma = ba = null;
				B = [];
				M(ib, function(d) {
					x = !1;
					M(["xAxis", "yAxis"], function(b) {
						if (d.isCartesian
								&& (b === "xAxis" && f || b === "yAxis" && !f)
								&& (d.options[b] === s.index || d.options[b] === C
										&& s.index === 0))
							d[b] = l, B.push(d), x = !0
					});
					!d.visible && la.ignoreHiddenSeries && (x = !1);
					if (x) {
						var I, c, g, j, e, ka;
						if (!f) {
							I = d.options.stacking;
							Wb = I === "percent";
							if (I)
								e = d.options.stack, j = d.type + o(e, ""), ka = "-"
										+ j, d.stackKey = j, c = b[j] || [], b[j] = c, g = k[ka]
										|| [], k[ka] = g;
							Wb && (Ma = 0, ba = 99)
						}
						d.isCartesian && (M(d.data, function(b) {
							var k = b.x, x = b.y, d = x < 0, e = d ? g : c, ta = d
									? ka
									: j;
							Ma === null && (Ma = ba = b[da]);
							f
									? k > ba ? ba = k : k < Ma && (Ma = k)
									: a(x)
											&& (I
													&& (e[k] = a(e[k]) ? e[k]
															+ x : x), x = e
													? e[k]
													: x, b = o(b.low, x), Wb
													|| (x > ba
															? ba = x
															: b < Ma
																	&& (Ma = b)), I
													&& (n[ta] || (n[ta] = {}), n[ta][k]
															|| (n[ta][k] = new u(
																	s.stackLabels,
																	d, k)), n[ta][k]
															.setTotal(x)))
						}), /(area|column|bar)/.test(d.type)
								&& !f
								&& (Ma >= 0 ? (Ma = 0, zc = !0) : ba < 0
										&& (ba = 0, ea = !0)))
					}
				})
			}
			function I(b, k) {
				var a, x;
				N = k ? 1 : ga.pow(10, yb(ga.log(b) / ga.LN10));
				a = b / N;
				if (!k
						&& (k = [1, 2, 2.5, 5, 10], s.allowDecimals === !1
								|| bb))
					N === 1 ? k = [1, 2, 5, 10] : N <= 0.1 && (k = [1 / N]);
				for (x = 0; x < k.length; x++)
					if (b = k[x], a <= (k[x] + (k[x + 1] || k[x])) / 2)
						break;
				b *= N;
				return b
			}
			function c(b) {
				var k;
				k = b;
				N = o(N, ga.pow(10, yb(ga.log(Q) / ga.LN10)));
				N < 1 && (k = R(1 / N) * 10, k = R(b * k) / k);
				return k
			}
			function g() {
				var b, k, x, u, d = s.tickInterval, j = s.tickPixelInterval;
				b = s.maxZoom
						|| (f && !a(s.min) && !a(s.max) ? pb(U.smallestInterval
										* 5, ba - Ma) : null);
				q = w ? fb : db;
				aa ? (x = U[f ? "xAxis" : "yAxis"][s.linkedTo], u = x
						.getExtremes(), Ga = o(u.min, u.dataMin), Na = o(u.max,
						u.dataMax)) : (Ga = o(xb, s.min, Ma), Na = o(Ja, s.max,
						ba));
				bb && (Ga = e(Ga), Na = e(Na));
				Na - Ga < b
						&& (u = (b - Na + Ga) / 2, Ga = ca(Ga - u, o(s.min, Ga
												- u), Ma), Na = pb(Ga + b, o(
										s.max, Ga + b), ba));
				if (!Ba && !Wb && !aa && a(Ga) && a(Na)) {
					b = Na - Ga || 1;
					if (!a(s.min) && !a(xb) && D && (Ma < 0 || !zc))
						Ga -= b * D;
					if (!a(s.max) && !a(Ja) && T && (ba > 0 || !ea))
						Na += b * T
				}
				Q = Ga === Na ? 1 : aa && !d
						&& j === x.options.tickPixelInterval
						? x.tickInterval
						: o(d, Ba ? 1 : (Na - Ga) * j / q);
				!Ya && !a(s.tickInterval) && (Q = I(Q));
				l.tickInterval = Q;
				$b = s.minorTickInterval === "auto" && Q
						? Q / 5
						: s.minorTickInterval;
				if (Ya) {
					F = [];
					var d = r.global.useUTC, ka = 1E3 / X, ta = 6E4 / X, p = 36E5
							/ X, j = 864E5 / X;
					b = 6048E5 / X;
					u = 2592E6 / X;
					var ja = 31556952E3 / X, h = [
							["second", ka, [1, 2, 5, 10, 15, 30]],
							["minute", ta, [1, 2, 5, 10, 15, 30]],
							["hour", p, [1, 2, 3, 4, 6, 8, 12]],
							["day", j, [1, 2]], ["week", b, [1, 2]],
							["month", u, [1, 2, 3, 4, 6]], ["year", ja, null]], va = h[6], n = va[1], v = va[2];
					for (x = 0; x < h.length; x++)
						if (va = h[x], n = va[1], v = va[2], h[x + 1]
								&& Q <= (n * v[v.length - 1] + h[x + 1][1]) / 2)
							break;
					n === ja && Q < 5 * n && (v = [1, 2, 5]);
					h = I(Q / n, v);
					v = new Date(Ga * X);
					v.setMilliseconds(0);
					n >= ka
							&& v.setSeconds(n >= ta ? 0 : h
									* yb(v.getSeconds() / h));
					if (n >= ta)
						v[Lc](n >= p ? 0 : h * yb(v[Ec]() / h));
					if (n >= p)
						v[Mc](n >= j ? 0 : h * yb(v[L]() / h));
					if (n >= j)
						v[Fc](n >= u ? 1 : h * yb(v[oc]() / h));
					n >= u
							&& (v[Nc](n >= ja ? 0 : h * yb(v[tc]() / h)), k = v[tb]());
					n >= ja && (k -= k % h, v[Oc](k));
					if (n === b)
						v[Fc](v[oc]() - v[Y]() + s.startOfWeek);
					x = 1;
					k = v[tb]();
					ka = v.getTime() / X;
					ta = v[tc]();
					for (p = v[oc](); ka < Na && x < fb;)
						F.push(ka), n === ja
								? ka = sc(k + x * h, 0) / X
								: n === u ? ka = sc(k, ta + x * h) / X : !d
										&& (n === j || n === b)
										? ka = sc(k, ta, p + x * h
														* (n === j ? 1 : 7))
										: ka += n * h, x++;
					F.push(ka);
					Sb = s.dateTimeLabelFormats[va[0]]
				} else {
					x = c(yb(Ga / Q) * Q);
					k = c(Qb(Na / Q) * Q);
					F = [];
					for (x = c(x); x <= k;)
						F.push(x), x = c(x + Q)
				}
				if (!aa) {
					if (Ba || f && U.hasColumn) {
						k = (Ba ? 1 : Q) * 0.5;
						if (Ba || !a(o(s.min, xb)))
							Ga -= k;
						if (Ba || !a(o(s.max, Ja)))
							Na += k
					}
					k = F[0];
					x = F[F.length - 1];
					s.startOnTick ? Ga = k : Ga > k && F.shift();
					s.endOnTick ? Na = x : Na < x && F.pop();
					Rb || (Rb = {
						x : 0,
						y : 0
					});
					if (!Ya && F.length > Rb[da])
						Rb[da] = F.length
				}
			}
			function j() {
				var b, k;
				z = Ga;
				y = Na;
				d();
				g();
				ua = t;
				t = q / (Na - Ga || 1);
				if (!f)
					for (b in n)
						for (k in n[b])
							n[b][k].cum = 0;
				if (!l.isDirty)
					l.isDirty = Ga !== z || Na !== y
			}
			function ka(b) {
				b = (new x(b)).render();
				O.push(b);
				return b
			}
			function ta() {
				var b = s.title, u = s.stackLabels, d = s.alternateGridColor, I = s.lineWidth, c, g, j = (c = U.hasRendered)
						&& a(z) && !isNaN(z);
				g = E(s.showAlways, B.length && a(Ga) && a(Na));
				q = w ? fb : db;
				t = q / (Na - Ga || 1);
				xa = w ? Ka : Ha;
				if (g || aa) {
					if ($b && !Ba)
						for (g = Ga + (F[0] - Ga) % $b; g <= Na; g += $b)
							Yb[g] || (Yb[g] = new k(g, !0)), j && Yb[g].isNew
									&& Yb[g].render(null, !0), Yb[g].isActive = !0, Yb[g]
									.render();
					M(F, function(b, k) {
						if (!aa || b >= Ga && b <= Na)
							j && Jb[b].isNew && Jb[b].render(k, !0), Jb[b].isActive = !0, Jb[b]
									.render(k)
					});
					d && M(F, function(b, k) {
								if (k % 2 === 0 && b < Na)
									Gb[b] || (Gb[b] = new x), Gb[b].options = {
										from : b,
										to : F[k + 1] !== C ? F[k + 1] : Na,
										color : d
									}, Gb[b].render(), Gb[b].isActive = !0
							});
					c
							|| M((s.plotLines || []).concat(s.plotBands || []),
									function(b) {
										O.push((new x(b)).render())
									})
				}
				M([Jb, Yb, Gb], function(b) {
							for (var k in b)
								b[k].isActive ? b[k].isActive = !1 : (b[k]
										.destroy(), delete b[k])
						});
				I
						&& (c = Ka + (ja ? fb : 0) + m, g = eb - Ha
								- (ja ? db : 0) + m, c = oa.crispLine([Aa,
										w ? Ka : c, w ? g : Pa, ra,
										w ? jb - P : c, w ? g : eb - Ha], I), Sa
								? Sa.animate({
											d : c
										})
								: Sa = oa.path(c).attr({
											stroke : s.lineColor,
											"stroke-width" : I,
											zIndex : 7
										}).add());
				if (v)
					c = w ? Ka : Pa, I = K(b.style.fontSize || 12), c = {
						low : c + (w ? 0 : q),
						middle : c + q / 2,
						high : c + (w ? q : 0)
					}[b.align], I = (w ? Pa + db : Ka - I * 0.37)
							+ (w ? 1 : -1) * (ja ? -1 : 1) * Jc
							+ (va === 2 ? I : 0), v[v.isNew
							? "attr"
							: "animate"]({
								x : w ? c : I + (ja ? fb : 0) + m + (b.x || 0),
								y : w ? I - (ja ? db : 0) + m : c + (b.y || 0)
							}), v.isNew = !1;
				if (u && u.enabled) {
					var e, ka, u = l.stackTotalGroup;
					if (!u)
						l.stackTotalGroup = u = oa.g("stack-labels").attr({
									visibility : gb,
									zIndex : 6
								}).translate(Ka, Pa).add();
					for (e in n)
						for (ka in b = n[e], b)
							b[ka].render(u)
				}
				e = s.scroll;
				ka = l.scroller;
				if (e
						&& e.enabled
						&& (w
								? (b = Ka + m - 2, u = eb - Ha - (!ja ? 0 : db)
										+ m + e.padding - 1)
								: (b = Ka + (ja ? fb : 0), u = eb - Ha), !ka))
					ka = l.scroller = oa.scroller(b, u, q + 4, e.height, w, {
								size : e.buttonWidth,
								padding : e.buttonPadding
							}, !1).attr({
								fill : e.color
							}).setScrollRatio(e.scrollRatio)
							.setScrollPosition(e.startPercent).callback(
									function() {
										l.scroll.apply(l, arguments)
									}).add(G);
				l.isDirty = !1
			}
			function p(b) {
				for (var k = O.length; k--;)
					O[k].id === b && O[k].destroy()
			}
			var f = b.isX, ja = b.opposite, w = Za ? !f : f, va = w ? ja
					? 0
					: 2 : ja ? 1 : 3, n = {}, s = ia(f ? uc : Gc, [Rc, Sc, Pc,
							Tc][va], b), l = this, v, Oa = s.type, Ya = Oa === "datetime", bb = Oa === "logarithmic", m = s.offset
					|| 0, da = f ? "x" : "y", q, t, ua, xa = w ? Ka : Ha, Mb, J, G, A, Sa, Ma, ba, B, xb, Ja, Na = null, Ga = null, z, y, D = s.minPadding, T = s.maxPadding, aa = a(s.linkedTo), zc, ea, Wb, Oa = s.events, W, O = [], Q, $b, N, F, Jb = {}, Yb = {}, Gb = {}, nc, wb, Jc, Sb, Ba = s.categories, $ = s.labels.formatter
					|| function() {
						var b = this.value;
						return Sb ? sa(Sb, b) : Q % 1E6 === 0
								? b / 1E6 + "M"
								: Q % 1E3 === 0 ? b / 1E3 + "k" : !Ba
										&& b >= 1E3 ? ma(b, 0) : b
					}, Fb = w && s.labels.staggerLines, pa = s.reversed, Eb = Ba
					&& s.tickmarkPlacement === "between" ? 0.5 : 0;
			k.prototype = {
				addLabel : function() {
					var b = this.pos, k = s.labels, x = !(b === Ga
							&& !o(s.showFirstLabel, 1) || b === Na
							&& !o(s.showLastLabel, 0)), u = Ba && w
							&& Ba.length && !k.step && !k.staggerLines
							&& !k.rotation && fb / Ba.length || !w && fb / 2, d = Ba
							&& a(Ba[b]) ? Ba[b] : b, I = this.label, b = $
							.call({
										isFirst : b === F[0],
										isLast : b === F[F.length - 1],
										dateTimeLabelFormat : Sb,
										value : bb ? ga.pow(10, d) : d
									}), u = u && {
						width : ca(1, R(u - 2 * (k.padding || 10))) + S
					}, u = h(u, k.style);
					I === C ? this.label = a(b) && x && k.enabled ? oa.text(b,
							0, 0, k.useHTML).attr({
								align : k.align,
								rotation : k.rotation
							}).css(u).add(G) : null : I && I.attr({
								text : b
							}).css(u)
				},
				getLabelSize : function() {
					var b = this.label;
					return b ? (this.labelBBox = b.getBBox())[w
							? "height"
							: "width"] : 0
				},
				render : function(b, k) {
					var x = !this.minor, u = this.label, d = this.pos, I = s.labels, c = this.gridLine, g = x
							? s.gridLineWidth
							: s.minorGridLineWidth, j = x
							? s.gridLineColor
							: s.minorGridLineColor, e = x
							? s.gridLineDashStyle
							: s.minorGridLineDashStyle, ka = this.mark, ta = x
							? s.tickLength
							: s.minorTickLength, p = x
							? s.tickWidth
							: s.minorTickWidth || 0, f = x
							? s.tickColor
							: s.minorTickColor, h = x
							? s.tickPosition
							: s.minorTickPosition, va = I.step, n = k && vc
							|| eb, v;
					v = w ? Mb(d + Eb, null, null, k) + xa : Ka + m
							+ (ja ? (k && Hc || jb) - P - Ka : 0);
					n = w ? n - Ha + m - (ja ? db : 0) : n
							- Mb(d + Eb, null, null, k) - xa;
					if (g) {
						d = J(d + Eb, g, k);
						if (c === C) {
							c = {
								stroke : j,
								"stroke-width" : g
							};
							if (e)
								c.dashstyle = e;
							if (x)
								c.zIndex = 1;
							this.gridLine = c = g
									? oa.path(d).attr(c).add(A)
									: null
						}
						!k && c && d && c.animate({
									d : d
								})
					}
					if (p)
						h === "inside" && (ta = -ta), ja && (ta = -ta), x = oa
								.crispLine([Aa, v, n, ra, v + (w ? 0 : -ta),
												n + (w ? ta : 0)], p), ka ? ka
								.animate({
											d : x
										}) : this.mark = oa.path(x).attr({
									stroke : f,
									"stroke-width" : p
								}).add(G);
					if (u && !isNaN(v)) {
						v = v + I.x - (Eb && w ? Eb * t * (pa ? -1 : 1) : 0);
						n = n + I.y - (Eb && !w ? Eb * t * (pa ? 1 : -1) : 0);
						a(I.y)
								|| (n += K(u.styles.lineHeight) * 0.9
										- u.getBBox().height / 2);
						Fb && (n += b / (va || 1) % Fb * 16);
						if (va)
							u[b % va ? "hide" : "show"]();
						u[this.isNew ? "attr" : "animate"]({
									x : v,
									y : n
								})
					}
					this.isNew = !1
				},
				destroy : function() {
					Bb(this)
				}
			};
			x.prototype = {
				render : function() {
					var b = this, k = b.options, x = k.label, u = b.label, d = k.width, I = k.to, c = k.from, g = k.value, j, ka = k.dashStyle, ta = b.svgElem, p = [], ja, h, va = k.color;
					h = k.zIndex;
					var s = k.events;
					b.chart = U;
					d === 0 && x && a(x.text) && (d = 1, va = Ub);
					bb && (c = e(c), I = e(I), g = e(g));
					if (d) {
						if (p = J([k.value, E(k.to, k.value)], d), k = {
							stroke : va,
							"stroke-width" : d
						}, ka)
							k.dashstyle = ka
					} else if (a(c) && a(I))
						c = ca(c, Ga), I = pb(I, Na), j = J(I), (p = J(c)) && j
								? (this.options.alwaysVisible
										&& (w
												? j[1] = j[4] += p[1] === j[1]
														&& p[4] === j[4]
												: j[2] = j[5] += p[2] === j[2]
														&& p[5] === j[5]), p
										.push(j[4], j[5], j[1], j[2]))
								: p = null, k = {
							fill : va
						};
					else
						return;
					if (a(h))
						k.zIndex = h;
					if (ta)
						p
								? ta.animate({
											d : p
										}, null, ta.onGetPath)
								: (ta.hide(), ta.onGetPath = function() {
									ta.show()
								});
					else if (p && p.length
							&& (b.svgElem = ta = oa.path(p).attr(k).add(), s))
						for (ja in ka = function(k) {
							ta.on(k, function(a) {
										s[k].apply(b, [a])
									})
						}, s)
							ka(ja);
					if (x && a(x.text) && p && p.length && fb > 0 && db > 0) {
						x = ia({
									align : w && j && "center",
									x : w ? !j && 4 : 10,
									verticalAlign : !w && j && "middle",
									y : w ? j ? 16 : 10 : j ? 6 : -4,
									rotation : w && !j && 90
								}, x);
						j = x.style;
						ja = K(j.lineHeight, 10);
						if (!u)
							b.label = u = oa.text(x.text, 0, 0).attr({
										align : x.textAlign || x.align,
										rotation : x.rotation,
										zIndex : h
									}).add().css(j);
						k = [p[1], p[4], o(p[6], p[1])];
						d = [p[2], p[5], o(p[7], p[2])];
						h = Ca(k);
						ka = Ca(d);
						k = Tb(k) - h;
						d = Tb(d) - ka;
						x.offsetScale !== void 0
								&& (x.offsetScaleIndex !== void 0
										? (I = (f ? U.yAxis : U.xAxis)[x.offsetScaleIndex], w
												? ka += I.translate(
														x.offsetScale, 0, 1)
														+ (x.offsetScale < 0
																? 2
																: -2)
												: (h = p[1]
														+ k
														/ 2
														- I.translate(
																x.offsetScale,
																0, 1)
														+ (x.offsetScale < 0
																? -2
																: 2), ka += K(
														ja, 10)
														* 0.37))
										: w
												? ka += db * x.offsetScale
												: h += fb * x.offsetScale);
						u.align(x, !1, {
									x : h,
									y : ka,
									width : k,
									height : d
								});
						u.textBound();
						j.visibility !== "hidden" && u.show()
					} else
						u && u.hide();
					return b
				},
				destroy : function() {
					for (var b in this)
						b !== "chart" && this[b] && this[b].destroy
								&& this[b].destroy(), delete this[b]
				}
			};
			u.prototype = {
				destroy : function() {
					Bb(this)
				},
				setTotal : function(b) {
					this.cum = this.total = b
				},
				render : function(b) {
					var k = this.options.formatter.call(this);
					this.label ? this.label.attr({
								text : k,
								visibility : V
							}) : this.label = U.renderer.text(k, 0, 0)
							.css(this.options.style).attr({
										align : this.textAlign,
										rotation : this.options.rotation,
										visibility : V
									}).add(b)
				},
				setOffset : function(b, k) {
					var a = this.isNegative, x = l.translate(this.total), u = l
							.translate(0), u = Da(x - u), d = U.xAxis[0]
							.translate(this.x)
							+ b, I = U.plotHeight, a = {
						x : Za ? a ? x : x - u : d,
						y : Za ? I - d - k : a ? I - x - u : I - x,
						width : Za ? u : k,
						height : Za ? k : u
					};
					this.label
							&& this.label.align(this.alignOptions, null, a)
									.attr({
												visibility : gb
											})
				}
			};
			Mb = function(b, k, a, x, u, d) {
				var I = 1, c = 0, j = x ? ua : t, x = x ? z : Ga;
				j || (j = t);
				a && (I *= -1, c = q);
				pa && (I *= -1, c -= I * q);
				d ? k ? (b /= j, bb && u && (b = ga.pow(10, b))) : (bb && u
						&& (b = e(b)), b *= j) : k ? (pa && (b = q - b), b = b
						/ j + x, bb && u && (b = ga.pow(10, b))) : (bb && u
						&& (b = e(b)), b = I * (b - x) * j + c);
				return b
			};
			J = function(b, k, a) {
				var x, u, d, I, c = a && vc || eb, j = a && Hc || jb, g;
				b instanceof Array || (b = [b, b]);
				d = Mb(b[0], null, null, a);
				I = Mb(b[1], null, null, a);
				b = R(d + xa);
				x = R(I + xa);
				a = R(c - d - xa);
				u = R(c - I - xa);
				if (isNaN(d) || isNaN(I))
					g = !0;
				else if (w) {
					if (a = Pa, u = c - Ha, b < Ka || b > Ka + fb)
						g = !0
				} else if (b = Ka, x = j - P, a < Pa || a > Pa + db)
					g = !0;
				return g ? null : oa.crispLine([Aa, b, a, ra, x, u], k || 0)
			};
			Za && f && pa === C && (pa = !0);
			h(l, {
				addPlotBand : ka,
				addPlotLine : ka,
				adjustTickAmount : function() {
					if (Rb && !Ya && !Ba && !aa) {
						var b = nc, k = F.length;
						nc = Rb[da];
						if (k < nc) {
							for (; F.length < nc;)
								F.push(c(F[F.length - 1] + Q));
							t *= (k - 1) / (nc - 1);
							Na = F[F.length - 1]
						}
						if (a(b) && nc !== b)
							l.isDirty = !0
					}
				},
				categories : Ba,
				getExtremes : function() {
					return {
						min : Ga,
						max : Na,
						dataMin : Ma,
						dataMax : ba,
						userMin : xb,
						userMax : Ja
					}
				},
				getPlotLinePath : J,
				getThreshold : function(b) {
					Ga > b ? b = Ga : Na < b && (b = Na);
					return Mb(b, 0, 1)
				},
				isXAxis : f,
				options : s,
				plotLinesAndBands : O,
				getOffset : function() {
					var b = E(s.showAlways, B.length && a(Ga) && a(Na)), x = 0, u = 0, d = s.title, I = s.labels, c = [
							-1, 1, 1, -1][va], j;
					G || (G = oa.g("axis").attr({
								zIndex : 7
							}).add(), A = oa.g("grid").attr({
								zIndex : 1
							}).add());
					wb = 0;
					if (b || aa)
						M(F, function(b) {
									Jb[b] ? Jb[b].addLabel() : Jb[b] = new k(b);
									if (va === 0 || va === 2 || {
										1 : "left",
										3 : "right"
									}[va] === I.align)
										wb = ca(Jb[b].getLabelSize(), wb)
								}), Fb && (wb += (Fb - 1) * 16);
					else
						for (j in Jb)
							Jb[j].destroy(), delete Jb[j];
					if (d && d.text) {
						if (!l.axisTitle)
							v = l.axisTitle = oa.text(d.text, 0, 0, d.useHTML)
									.attr({
												zIndex : 7,
												rotation : d.rotation || 0,
												align : d.textAlign || {
													low : "left",
													middle : "center",
													high : "right"
												}[d.align]
											}).css(d.style).add(), v.isNew = !0;
						x = v.getBBox()[w ? "height" : "width"];
						u = o(d.margin, w ? 5 : 10)
					}
					m = c * (s.offset || Ea[va]);
					Jc = wb + (va !== 2 && wb && c * s.labels[w ? "y" : "x"])
							+ u;
					Ea[va] = ca(Ea[va], Jc + x + c * m)
				},
				render : ta,
				setCategories : function(k, a) {
					l.categories = b.categories = Ba = k;
					M(B, function(b) {
								b.translate();
								b.setTooltipPoints(!0)
							});
					l.isDirty = !0;
					o(a, !0) && U.redraw()
				},
				setExtremes : function(b, k, a, x) {
					a = o(a, !0);
					Ia(l, "setExtremes", {
								min : b,
								max : k
							}, function() {
								xb = b;
								Ja = k;
								a && U.redraw(x)
							})
				},
				setScale : j,
				setTickPositions : g,
				translate : Mb,
				redraw : function() {
					ob.resetTracker && ob.resetTracker();
					ta();
					M(O, function(b) {
								b.render()
							});
					M(B, function(b) {
								b.isDirty = !0
							})
				},
				removePlotBand : p,
				removePlotLine : p,
				reversed : pa,
				stacks : n,
				scroll : function(b, k, a) {
					var x = this.options, u = x.scroll, x = x.min, d = u.vxLength, I = u.viewPortMin, b = (u.viewPortMax
							- I - d)
							* b + I, u = b + d, c;
					a === void 0 && (a = !0);
					ob.resetTracker
							&& (a ? ob.resetTracker() : U.tooltip
									&& U.tooltip.hide());
					xb = b;
					Ja = u;
					kb(o(k, !1), U);
					Zb
							&& (Ob || (Rb = null, this.setScale()), M(O,
									function(b) {
										b.render()
									}), c = t * (b - x), M(B, function(b) {
										b.scroll(c, 0, a)
									}));
					Ia(U, "scroll")
				},
				destroy : function() {
					var b;
					ya(l);
					for (b in n)
						Bb(n[b]), n[b] = null;
					if (l.stackTotalGroup)
						l.stackTotalGroup = l.stackTotalGroup.destroy();
					M([Jb, Yb, Gb, O], function(b) {
								Bb(b)
							});
					M([Sa, G, A, v], function(b) {
								b && b.destroy()
							});
					Sa = G = A = v = null
				}
			});
			for (W in Oa)
				za(l, W, Oa[W]);
			j()
		}
		function u() {
			var k = {};
			return {
				add : function(a, x, u, d) {
					k[a]
							|| (x = oa.text(x, 0, 0).css(b.toolbar.itemStyle)
									.align({
												align : "right",
												x : -P - 20,
												y : Pa + 30
											}).on("click", d).attr({
												align : "right",
												zIndex : 20
											}).add(), k[a] = x)
				},
				remove : function(b) {
					ha(k[b].element);
					k[b] = null
				}
			}
		}
		function I(b) {
			function k() {
				var b = this.points || D(this), a = b[0].series.xAxis, x = this.x, a = a
						&& a.options.type === "datetime", u = z(x) || a, d;
				d = u ? ['<span style="font-size: 10px">'
						+ (a ? sa("%A, %b %e, %Y", x) : x) + "</span>"] : [];
				M(b, function(b) {
							d.push(b.point.tooltipFormatter(u))
						});
				return d.join("<br/>")
			}
			function a(b, k) {
				ja = p ? b : (2 * ja + b) / 3;
				h = p ? k : (h + k) / 2;
				n.translate(ja, h);
				Vb = Da(b - ja) > 1 || Da(k - h) > 1 ? function() {
					a(b, k)
				} : null;
				w.x = b;
				w.y = k
			}
			function x() {
				if (!p) {
					var b = U.hoverPoints;
					n.hide();
					M(c, function(b) {
								b && b.hide()
							});
					b && M(b, function(b) {
								b.setState()
							});
					U.hoverPoints = null;
					p = !0;
					w.hidden = p;
					w.text = ""
				}
			}
			var u, d = b.borderWidth, I = b.crosshairs, c = [], j = b.style, g = b.shared, e = K(j.padding), ka = d
					+ e, p = o(b.hidden, !0), ta, f, ja = b.x || 0, h = b.y
					|| 0, w, va = "plot", s = !1;
			w = ec(Xa.chartInstance.jsVars._reflowData, {
						hcJSON : {
							tooltip : {}
						}
					}, !0).hcJSON.tooltip;
			j.padding = 0;
			var n = oa.g("tooltip").attr({
						zIndex : 8
					}).add(), v = oa.rect(ka, ka, 0, 0, b.borderRadius, d)
					.attr({
								fill : b.backgroundColor,
								"stroke-width" : d
							}).add(n).shadow(b.shadow, void 0, b.shadow), l = oa
					.text(b.text || "", e + ka, K(j.fontSize) + e + ka).attr({
								zIndex : 1
							}).css(j).add(n);
			b.text
					&& (bBox = l.getBBox(), ta = bBox.width + 2 * e, f = bBox.height
							+ 2 * e, v.attr({
								width : ta,
								height : f,
								stroke : b.borderColor
							}));
			p ? n.hide() : n.translate(ja, h);
			return {
				shared : g,
				refresh : function(d, j) {
					var ja, h, r, Oa = 0;
					ja = {};
					var Ya, bb = [];
					r = d.tooltipPos;
					Ya = b.formatter || k;
					ja = U.hoverPoints;
					if (s)
						x();
					else if (va = d.tooltipConstraint || "plot", g ? (ja
							&& M(ja, function(b) {
										b.setState()
									}), U.hoverPoints = d, M(d, function(b) {
								b.setState(wb);
								Oa += b.plotY;
								bb.push(b.getLabelConfig())
							}), h = d[0].plotX, Oa = R(Oa) / d.length, ja = {
						x : d[0].category
					}, ja.points = bb, d = d[0]) : ja = d.getLabelConfig(), Ya = Ya
							.call(ja), u = d.series, h = g ? h : d.plotX, Oa = g
							? Oa
							: d.plotY, ja = R(r ? r[0] : Za ? fb - Oa : h), h = R(r
							? r[1]
							: Za ? db - h : Oa), r = g || !d.series.isCartesian
							|| nb(ja, h), Ya === !1 || !r
							? x()
							: (p && !j && (n.show(), p = !1), l.attr({
										text : Ya
									}), r = l.getBBox(), ta = r.width + 2 * e, f = r.height
									+ 2 * e, v.attr({
										width : ta,
										height : f,
										stroke : b.borderColor || d.color
												|| u.color || "#606060"
									}), ja = m(ta, f, Ka, Pa, fb, db, {
										x : ja,
										y : h
									}), a(R(ja.x - ka), R(ja.y - ka)), w.hidden = p, w.text = Ya), I) {
						I = D(I);
						for (Ya = I.length; Ya--;)
							if (ja = d.series[Ya ? "yAxis" : "xAxis"], I[Ya]
									&& ja)
								if (ja = ja.getPlotLinePath(d[Ya ? "y" : "x"],
										1), c[Ya])
									c[Ya].attr({
												d : ja,
												visibility : gb
											});
								else {
									h = {
										"stroke-width" : I[Ya].width || 1,
										stroke : I[Ya].color || "#C0C0C0",
										zIndex : 2
									};
									if (I[Ya].dashStyle)
										h.dashstyle = I[Ya].dashStyle;
									c[Ya] = oa.path(ja).attr(h).add()
								}
					}
				},
				hide : x,
				destroy : function() {
					M(c, function(b) {
								b && b.destroy()
							});
					M([v, l, n], function(b) {
								b && b.destroy()
							});
					v = l = n = null
				},
				currentConstraint : function() {
					return va
				},
				move : a,
				block : function(b) {
					(s = Boolean(b)) && x()
				},
				visible : function() {
					return p
				}
			}
		}
		function ta(b) {
			function k(b) {
				var a, x = p && Qa.width / Qa.body.scrollWidth - 1, u, I, c, b = b
						|| lb.event;
				if (!b.target)
					b.target = b.srcElement;
				a = b.touches ? b.touches.item(0) : b;
				if (b.type !== "mousemove" || lb.opera || x)
					Lb = l(Ra), u = Lb.left, I = Lb.top;
				d ? (c = b.x, a = b.y) : a.layerX === C
						? (c = a.pageX - u, a = a.pageY - I)
						: (c = b.layerX, a = b.layerY);
				x && (c += R((x + 1) * u - u), a += R((x + 1) * I - I));
				return h(b, {
							chartX : c,
							chartY : a
						})
			}
			function x(b) {
				var k = {
					xAxis : [],
					yAxis : []
				};
				M(sb, function(a) {
							var x = a.translate, u = a.isXAxis;
							k[u ? "xAxis" : "yAxis"].push({
										axis : a,
										value : x((Za ? !u : u)
														? b.chartX - Ka
														: db - b.chartY + Pa,
												!0)
									})
						});
				return k
			}
			function u() {
				var b = U.hoverSeries, k = U.hoverPoint;
				if (k)
					k.onMouseOut();
				if (b)
					b.onMouseOut();
				hb && hb.hide();
				Xb = null
			}
			function c() {
				if (ta) {
					var b = {
						xAxis : [],
						yAxis : []
					}, k = ta.getBBox(), a = k.x - Ka, x = k.y - Pa;
					b.selectionLeft = a;
					b.selectionTop = x;
					b.selectionWidth = k.width;
					b.selectionHeight = k.height;
					ka && (M(sb, function(u) {
						var d = u.translate, I = u.isXAxis, c = Za ? !I : I, j = d(
								c ? a : db - x - k.height, !0, 0, 0, 1), d = d(
								c ? a + k.width : db - x, !0, 0, 0, 1);
						b[I ? "xAxis" : "yAxis"].push({
									axis : u,
									min : pb(j, d),
									max : ca(j, d)
								})
					}), Ia(U, "selection", b, la.nativeZoom ? Ic : void 0));
					ta = ta.destroy()
				}
				U && (U.mouseIsDown = ac = ka = !1);
				ya(Qa, da ? "touchend" : "mouseup", c)
			}
			function j(b) {
				var k = a(b.pageX) ? b.pageX : b.page.x, b = a(b.pageX)
						? b.pageY
						: b.page.y, x = U.tooltip
						&& U.tooltip.currentConstraint();
				if (Lb)
					switch (x) {
						case "plot" :
							!nb(k - Lb.left - Ka, b - Lb.top - Pa) && u();
							break;
						default :
							!mb(k - Lb.left, b - Lb.top) && u()
					}
			}
			var g, e, ka, ta, ja = la.zoomType, w = /x/.test(ja), va = /y/
					.test(ja), s = w && !Za || va && Za, n = va && !Za || w
					&& Za;
			Nb = function() {
				Cb ? (Cb.translate(Ka, Pa), Za && Cb.attr({
							width : U.plotWidth,
							height : U.plotHeight
						}).invert()) : U.trackerGroup = Cb = oa.g("tracker")
						.attr({
									zIndex : 9
								}).add()
			};
			Nb();
			if (b.enabled)
				U.tooltip = hb = I(b);
			(function() {
				Ra.onmousedown = function(b) {
					b = k(b);
					!da && b.preventDefault && b.preventDefault();
					U.mouseIsDown = ac = !0;
					g = b.chartX;
					e = b.chartY;
					za(Qa, da ? "touchend" : "mouseup", c)
				};
				var a = function(a) {
					if (!a || !(a.touches && a.touches.length > 1)) {
						a = k(a);
						if (!da)
							a.returnValue = !1;
						var x = a.chartX, u = a.chartY, d = !nb(x - Ka, u - Pa);
						Lb || (Lb = l(Ra));
						da
								&& a.type === "touchstart"
								&& (f(a.target, "isTracker")
										? U.runTrackerClick
												|| a.preventDefault()
										: !ub && !d && a.preventDefault());
						d
								&& (x < Ka ? x = Ka : x > Ka + fb
										&& (x = Ka + fb), u < Pa
										? u = Pa
										: u > Pa + db && (u = Pa + db));
						if (ac && a.type !== "touchstart") {
							if (ka = Math.sqrt(Math.pow(g - x, 2)
									+ Math.pow(e - u, 2)), ka > 10) {
								if (Zb && (w || va) && nb(g - Ka, e - Pa))
									ta
											|| (ta = oa.rect(Ka, Pa,
													s ? 1 : fb, n ? 1 : db, 0)
													.attr({
														fill : la.selectionMarkerFill
																|| "rgba(69,114,167,0.25)",
														zIndex : 7
													}).add());
								ta && s && (x -= g, ta.attr({
											width : Da(x),
											x : (x > 0 ? 0 : x) + g
										}));
								ta && n && (u -= e, ta.attr({
											height : Da(u),
											y : (u > 0 ? 0 : u) + e
										}))
							}
						} else if (!d) {
							var I, u = U.hoverPoint, x = U.hoverSeries, c, j, p = jb, ja = Za
									? a.chartY
									: a.chartX - Ka;
							if (hb && b.shared) {
								I = [];
								c = ib.length;
								for (j = 0; j < c; j++)
									if (ib[j].visible
											&& ib[j].tooltipPoints.length)
										a = ib[j].tooltipPoints[ja], a._dist = Da(ja
												- a.plotX), p = pb(p, a._dist), I
												.push(a);
								for (c = I.length; c--;)
									I[c]._dist > p && I.splice(c, 1);
								if (I.length && I[0].plotX !== Xb)
									hb.refresh(I), Xb = I[0].plotX
							}
							if (x
									&& x.tracker
									&& (a = x.tooltipPoints[ja
											+ ((Za ? x.yShift : x.xShift) || 0)])
									&& a !== u)
								a.onMouseOver()
						}
						return d || !Zb
					}
				};
				Ra.onmousemove = a;
				za(Ra, "mouseleave", u);
				za(Qa, "mousemove", j);
				Ra.ontouchstart = function(b) {
					if (w || va)
						Ra.onmousedown(b);
					a(b)
				};
				Ra.ontouchmove = a;
				Ra.ontouchend = function() {
					ka && u()
				};
				Ra.onclick = function(b) {
					var a = U.hoverPoint, b = k(b);
					b.cancelBubble = !0;
					if (!ka)
						if (a && f(b.target, "isTracker")) {
							var u = a.plotX, d = a.plotY;
							h(a, {
										pageX : Lb.left + Ka
												+ (Za ? fb - d : u),
										pageY : Lb.top + Pa + (Za ? db - u : d)
									});
							Ia(a.series, "click", h(b, {
												point : a
											}));
							a.firePointEvent("click", b)
						} else
							h(b, x(b)), Ia(U, "click", b);
					ka = !1
				}
			})();
			cc = setInterval(function() {
						Vb && Vb()
					}, 32);
			h(this, {
				normalizeMouseEvent : k,
				getMouseCoordinates : x,
				zoomX : w,
				zoomY : va,
				resetTracker : u,
				destroy : function() {
					if (U.trackerGroup)
						U.trackerGroup = Cb = U.trackerGroup.destroy();
					ya(Qa, "mousemove", j);
					Ra.onclick = Ra.onmousedown = Ra.onmousemove = Ra.ontouchstart = Ra.ontouchend = Ra.ontouchmove = null
				}
			})
		}
		function ka(b) {
			var k = b.type || la.type || la.defaultSeriesType, a = Fa[k], x = U.hasRendered;
			if (x)
				if (Za && k === "column")
					a = Fa.bar;
				else if (!Za && k === "bar")
					a = Fa.column;
			k = new a;
			k.init(U, b);
			!x && k.inverted && (Za = !0);
			if (k.isCartesian)
				Zb = k.isCartesian;
			ib.push(k);
			return k
		}
		function ja() {
			la.alignTicks !== !1 && M(sb, function(b) {
						b.adjustTickAmount()
					});
			Rb = null
		}
		function va(b) {
			var k = U.isDirtyLegend, a, x = U.isDirtyBox, u = ib.length, d = u, I = U.clipRect;
			for (kb(b, U); d--;)
				if (b = ib[d], b.isDirty && b.options.stacking) {
					a = !0;
					break
				}
			if (a)
				for (d = u; d--;)
					if (b = ib[d], b.options.stacking)
						b.isDirty = !0;
			M(ib, function(b) {
				b.isDirty
						&& (b.cleanData(), b.getSegments(), b.options.legendType === "point"
								&& (k = !0))
			});
			if (k && Kb.renderLegend)
				Kb.renderLegend(), U.isDirtyLegend = !1;
			Zb && (Ob || (Rb = null, M(sb, function(b) {
						b.setScale()
					})), ja(), pc(), M(sb, function(b) {
						if (b.isDirty || x)
							b.redraw(), x = !0
					}));
			x && (dc(), Nb(), I && (wc(I), I.animate({
						width : U.plotSizeX,
						height : U.plotSizeY
					})));
			M(ib, function(b) {
						b.isDirty && b.visible && (!b.isCartesian || b.xAxis)
								&& b.redraw()
					});
			ob && ob.resetTracker && ob.resetTracker();
			Ia(U, "redraw")
		}
		function w() {
			var k = b.xAxis || {}, a = b.yAxis || {}, u, k = D(k);
			M(k, function(b, k) {
						b.index = k;
						b.isX = !0
					});
			a = D(a);
			M(a, function(b, k) {
						b.index = k
					});
			sb = k.concat(a);
			U.xAxis = [];
			U.yAxis = [];
			sb = hc(sb, function(b) {
						u = new x(b);
						U[u.isXAxis ? "xAxis" : "yAxis"].push(u);
						return u
					});
			ja()
		}
		function n(k, a) {
			Eb = ia(b.title, k);
			qc = ia(b.subtitle, a);
			M([["title", k, Eb], ["subtitle", a, qc]], function(b) {
						var k = b[0], a = U[k], x = b[1], b = b[2];
						a && x && (a = a.destroy());
						b
								&& b.text
								&& !a
								&& (U[k] = oa.text(b.text, 0, 0, b.useHTML)
										.attr({
													align : b.align,
													"class" : "highcharts-" + k,
													zIndex : 1
												}).css(b.style).add().align(b,
												!1, qa))
					})
		}
		function bb() {
			Ib = la.renderTo;
			Hb = Fb + v++;
			z(Ib) && (Ib = Qa.getElementById(Ib));
			Ib.innerHTML = "";
			Ib.offsetWidth || (La = Ib.cloneNode(0), A(La, {
						position : ba,
						top : "-9999px",
						display : ""
					}), Qa.body.appendChild(La));
			Ta = (La || Ib).offsetWidth;
			xc = (La || Ib).offsetHeight;
			U.chartWidth = jb = la.width || Ta || 600;
			U.chartHeight = eb = la.height || xc || 400;
			U.container = Ra = J(Ja, {
						className : "highcharts-container"
								+ (la.className ? " " + la.className : ""),
						id : Hb
					}, h({
								position : G,
								overflow : V,
								width : jb + S,
								height : eb + S,
								textAlign : "left"
							}, la.style), La || Ib);
			U.renderer = oa = la.forExport ? new yc(Ra, jb, eb, !0) : new s(Ra,
					jb, eb);
			oa.lighting3D = U.options.chart.use3DLighting;
			oa.smartLabel = Xa.smartLabel;
			var b;
			h(oa, {
						pending : [],
						processBatch : function() {
							setTimeout(b, oa.batchSpeed || 0)
						}
					});
			b = function() {
				if (oa && oa.pending) {
					for (var k = oa.pending, a = oa.batchCapacity || 50, x = oa.simpleAppend, u, d; (u = k
							.shift())
							&& a-- && oa;) {
						d = u._parentNode;
						if (!u.added)
							x && d
									? (d.element.appendChild(u.element), u.added = !0, j
											&& d
											&& d.element.gVis === V
											&& u.attr({
														visibility : V
													}))
									: u.add(d);
						delete u._parentNode
					}
					a && setTimeout(b, oa.batchSpeed || 0)
				}
			};
			var k, a;
			c && Ra.getBoundingClientRect && (k = function() {
				A(Ra, {
							left : 0,
							top : 0
						});
				a = Ra.getBoundingClientRect();
				A(Ra, {
							left : -(a.left - K(a.left)) + S,
							top : -(a.top - K(a.top)) + S
						})
			}, k(), za(lb, "resize", k), za(U, "destroy", function() {
						ya(lb, "resize", k)
					}))
		}
		function q() {
			function b() {
				var a = la.width || Ib.offsetWidth, x = la.height
						|| Ib.offsetHeight;
				if (a && x) {
					if (a !== Ta || x !== xc)
						clearTimeout(k), k = setTimeout(function() {
									jc(a, x, !1)
								}, 100);
					Ta = a;
					xc = x
				}
			}
			var k;
			za(lb, "resize", b);
			za(U, "destroy", function() {
						ya(lb, "resize", b)
					})
		}
		function ua() {
			Ia(U, "endResize", null, function() {
						Ob -= 1
					})
		}
		function Sa() {
			var b = this.options.chart.canvasBaseColor3D, k = this.options.chart.canvasBaseDepth, a = this.options.chart.canvasBgDepth, x = this.options.chart.canvasBgColor, u = this.renderer, d = this.options.chart.defaultSeriesType, I = this.xDepth, c = this.yDepth;
			if (this.options.chart.showCanvasBase)
				this.base3D = d === "bar3d" ? u.rect3d(this.plotLeft - I - k,
						this.plotTop + c, k, this.plotHeight, I, c, 0,
						"canvasBase3D") : u.rect3d(this.plotLeft - I,
						this.plotTop + this.plotHeight + c, this.plotWidth, k,
						I, c, 0, "canvasBase3D"), this.base3D.attr({
							fill : b,
							lighting3D : this.options.chart.use3DLighting
						}).add();
			if (this.options.chart.showCanvasBg)
				lc.depth3D = d === "bar3d" ? u.path(["M", this.plotLeft,
						this.plotTop, "L", this.plotLeft + a * 1.2,
						this.plotTop - a, this.plotLeft + this.plotWidth - a,
						this.plotTop - a, this.plotLeft + this.plotWidth,
						this.plotTop, "Z"]).attr({
							fill : x
						}).add() : u.path(["M", this.plotLeft + this.plotWidth,
						this.plotTop, "L", this.plotLeft + this.plotWidth + a,
						this.plotTop + a * 1.2,
						this.plotLeft + this.plotWidth + a,
						this.plotTop + this.plotHeight - a,
						this.plotLeft + this.plotWidth,
						this.plotTop + this.plotHeight, "Z"]).attr({
							fill : x
						}).add()
		}
		function B() {
			var k = b.labels, a = b.credits, x, I = {}, c;
			n();
			Kb = U.legend = new Cc;
			pc();
			M(sb, function(b) {
						b.setTickPositions(!0)
					});
			ja();
			pc();
			dc();
			Zb && M(sb, function(b) {
						b.render()
					});
			if (!U.seriesGroup)
				U.seriesGroup = oa.g("series-group").attr({
							zIndex : 3
						}).add();
			M(ib, function(k) {
						k.translate();
						k.setTooltipPoints();
						b.chart.is3D ? (c = k.type, I[c] || (I[c] = []), I[c]
								.push(k)) : k.render()
					});
			if (b.chart.is3D)
				U.xDepth = O(b.chart.xDepth, 10), U.yDepth = O(b.chart.yDepth,
						10), Sa.call(U), Dc(U, I);
			k.items && M(k.items, function() {
				var b = h(k.style, this.style), a = K(b.left) + Ka, x = K(b.top)
						+ Pa;
				delete b.left;
				delete b.top;
				b = oa.text(this.html, a, x).attr({
							zIndex : O(this.zIndex, 2),
							align : E(this.textAlign, "left")
						}).css(b).add();
				this.vAlign === "bottom" && b.attr({
							y : x - b.getBBox().height
						});
				this.vAlign === "middle" && b.attr({
							y : x - b.getBBox().height / 2
						})
			});
			if (!U.toolbar)
				U.toolbar = u(U);
			if (a.enabled && !U.credits)
				x = a.href, oa.text(a.text, 0, 0).on("click", function() {
							if (x)
								location.href = x
						}).attr({
							align : a.position.align,
							zIndex : 8
						}).css(a.style).add().align(a.position);
			Nb();
			if (b.buttons)
				for (var j in b.buttons)
					U.addButton(b.buttons[j]);
			if (b.subCharts && b.subCharts.length && !oa.forExport)
				U.subCharts = [], M(b.subCharts, function(k) {
							var a = k.chart;
							a.renderTo = J(Ja, null, {
										position : "relative",
										background : "transparent",
										left : a.left + S,
										top : (d && !g ? a.top : a.top - eb)
												+ S,
										width : a.width + S,
										height : a.height + S
									}, Ra);
							h(k, {
										instanceAPI : b.instanceAPI
									});
							U.subCharts.push(new vb(k))
						});
			b.chart.hasScroll && Zb && M(sb, function(b) {
						var k = b.options.scroll;
						k && k.enabled && b.scroll(k.startPercent, !1, !0)
					});
			U.hasRendered = !0;
			La && (Ib.appendChild(Ra), ha(La))
		}
		function Ga() {
			var b, k = Ra && Ra.parentNode;
			if (U !== null) {
				Ia(U, "destroy");
				ya(lb, "unload", Ga);
				ya(U);
				for (b = sb.length; b--;)
					sb[b] = sb[b].destroy();
				for (b = ib.length; b--;)
					ib[b] = ib[b].destroy();
				M(		["title", "subtitle", "seriesGroup", "clipRect",
								"credits", "tracker"], function(b) {
							var k = U[b];
							k && (U[b] = k.destroy())
						});
				M([mc, bc, lc, Kb, hb, oa, ob], function(b) {
							b && b.destroy && b.destroy()
						});
				mc = bc = lc = Kb = hb = oa = ob = null;
				if (Ra)
					Ra.innerHTML = "", ya(Ra), k && ha(Ra), Ra = null;
				clearInterval(cc);
				for (b in U)
					delete U[b];
				U = null
			}
		}
		function aa() {
			!g && lb == lb.top && Qa.readyState !== "complete"
					? Qa.attachEvent("onreadystatechange", function() {
								Qa.detachEvent("onreadystatechange", aa);
								Qa.readyState === "complete" && aa()
							})
					: (Xa.hcInstance = U, bb(), fc(), gc(), M(b.series || [],
							function(b) {
								ka(b)
							}), U.inverted = Za = o(Za, b.chart.inverted), w(), U.render = B, U.tracker = ob = new ta(b.tooltip), B(), Ia(
							U, "load"), M(U.callbacks, function(b) {
								b.apply(U, [U, Xa])
							}), M(b.callbacks, function(b) {
								b.apply(U, [U, Xa])
							}))
		}
		uc = ia(uc, r.xAxis);
		Gc = ia(Gc, r.yAxis);
		r.xAxis = r.yAxis = null;
		b = ia(r, b);
		k && b.callbacks.push(k);
		var la = b.chart, Ma = la.margin, Ma = t(Ma) ? Ma : [Ma, Ma, Ma, Ma], Wb = o(
				la.marginTop, Ma[0]), ea = o(la.marginRight, Ma[1]), $b = o(
				la.marginBottom, Ma[2]), Q = o(la.marginLeft, Ma[3]), Sb = la.spacingTop, $ = la.spacingRight, fa = la.spacingBottom, Ac = la.spacingLeft, qa, Eb, qc, Pa, P, Ha, Ka, Ea, Ib, La, Ra, Hb, Ta, xc, jb, eb, Hc, vc, mc, lc, Kc, Xa = b.instanceAPI, Va, Wa, ab, cb, mb, bc, U = this, ub = (Ma = la.events)
				&& !!Ma.click, qb, nb, hb, ac, rb, Ab, Db, db, fb, ob, Cb, Nb, Kb, ic, Pb, Lb, Zb = la.showAxes, Ob = 0, sb = [], Rb, ib = [], Za, oa, Vb, cc, Xb, dc, pc, fc, gc, jc, Ic, rc, Cc = function() {
			function b(k) {
				var a = k.pageX + q.dragOffsetX, k = k.pageY + q.dragOffsetY;
				if (a < q.movementBoundaryOrigin)
					a = q.movementBoundaryOrigin;
				else if (a > q.movementBoundaryX)
					a = q.movementBoundaryX;
				if (k < q.movementBoundaryOrigin)
					k = q.movementBoundaryOrigin;
				else if (k > q.movementBoundaryY)
					k = q.movementBoundaryY;
				q.translate(a, k)
			}
			function k(b, a) {
				var x = b.legendItem, u = b.legendLine, d = b.legendSymbol, c = ja.color, g = a
						? I.itemStyle.color
						: c, e = a ? b.color : c, ka = b.customSymbol, c = a
						? b.pointAttr[Ba]
						: {
							stroke : c,
							fill : c
						};
				x && x.css({
							fill : g
						});
				u && u.attr({
							stroke : e,
							"stroke-width" : 2,
							"stroke-opacity" : 1
						});
				d && (d.attr(c), d.attr({
							r : Qb(j / (u ? 4 : 2)),
							"stroke-width" : 1,
							"stroke-opacity" : 1,
							"fill-opacity" : 1
						}));
				ka && ka.attr(a ? ka.symbolAttr : c)
			}
			function a(b, k, x) {
				var u = b.legendItem, d = b.legendLine, I = b.legendSymbol, c = b.checkbox, j = b.customSymbol, g = b.legendLabelHeight;
				u && u.align({
							x : k,
							y : x,
							height : g,
							verticalAlign : "middle"
						}, !0, {
							height : b.legendItemHeight
						});
				d && d.translate(k, x);
				I && I.attr({
							x : k + X,
							y : x + m
						});
				j && b.customSymbol.translate(k, x);
				if (c)
					c.x = k, c.y = x
			}
			function x() {
				M(e, function(b) {
							var k = b.checkbox, a = F.alignAttr;
							k && A(k, {
										left : a.translateX + b.legendItemWidth
												+ k.x - 40 + S,
										top : a.translateY + k.y - 11 + S
									})
						})
			}
			function u(b) {
				var x, d, e, ka = b.legendItem, h = b.series || b;
				x = h.options;
				var w;
				if (!ka) {
					e = /^(bar|pie|pie3d|area|column|column3d|bar3d|floatedcolumn|radar|funnel|pyramid|boxandwhisker2d)$/
							.test(h.type);
					b.legendItem = ka = oa.text(I.labelFormatter.call(b), 0, 0)
							.css(b.visible ? p : ja).on("mouseover",
									function() {
										b.setState(wb);
										ka.css(ta)
									}).on("mouseout", function() {
										ka.css(b.visible ? p : ja);
										b.setState()
									}).on("click", function() {
								var k = {
									datasetName : h.name,
									datasetIndex : h.index,
									userID : h.userID
								}, a = function() {
									Ua.raiseEvent("LegendItemClicked", k,
											Xa.chartInstance);
									b.setVisible(void 0, !1)
								};
								Xa.sliceOnLegendClick
										|| (w = {
											hcJSON : {
												series : []
											}
										}, w.hcJSON.series[h.index] = {
											visible : !h.visible
										}, ec(
												Xa.chartInstance.jsVars._reflowData,
												w, !0));
								if (F.dragActive)
									return delete F.dragActive, !1;
								b.firePointEvent ? b.firePointEvent(
										"legendItemClick", null, a) : Ia(b,
										"legendItemClick", null, a)
							}).attr({
										zIndex : 2
									}).add(F);
					if (!e && x && x.lineWidth) {
						var va = {
							"stroke-width" : x.lineWidth,
							zIndex : 2
						};
						if (x.dashStyle)
							va.dashstyle = x.dashStyle;
						b.legendLine = oa.path([Aa, Ya, m, ra, Ya + j, m])
								.attr(va).add(F).css(I.symbolStyle).on("click",
										function() {
											Ia(ka.element, "click")
										})
					}
					e
							? (e = y(Ya, bb, j, j, h.type, b, oa), b.customSymbol = oa
									.path(e.path).attr({
												"stroke-width" : e.strokeWidth,
												zIndex : 3
											}).add(F), b.customSymbol.symbolAttr = {
								stroke : e.strokeColor,
								fill : e.color
							})
							: x
									&& x.marker
									&& x.marker.enabled
									&& (d = oa.symbol(b.symbol, X, m, j / 2)
											.attr({
														zIndex : 3
													}).add(F));
					b.legendSymbol = d;
					k(b, b.visible);
					if (d = d || b.customSymbol)
						d.css(I.symbolStyle).on("click", function() {
									Ia(ka.element, "click")
								});
					if (x && x.showCheckbox)
						b.checkbox = J("input", {
									type : "checkbox",
									checked : b.selected,
									defaultChecked : b.selected
								}, I.itemCheckboxStyle, Ra), za(b.checkbox,
								"click", function(k) {
									Ia(b, "checkboxClick", {
												checked : k.target.checked
											}, function() {
												b.select()
											})
								})
				}
				x = ka.getBBox();
				d = b.legendItemWidth = I.itemWidth || j + g + x.width + f;
				V = b.legendItemHeight = ca(x.height, xa);
				b.legendLabelHeight = x.height;
				b.symbolSize = j;
				b.lineHeight = xa;
				if (c)
					if (xa && sa) {
						for (; da[t] === !0;)
							t += 1;
						Mb = yb(t / sa);
						ua = t % sa;
						Mb > C && (L += xa * (Mb - C), C = Mb);
						la = l + ua * d;
						da[t] = !0;
						G = V / xa;
						Ga = t;
						for (Na = 0; Na < G; Na += 1, Ga += sa)
							da[Ga] = !0
					} else if (la - l + d > (E || jb - 2 * f - l))
						la = l, L += V;
				B = L;
				a(b, la, L);
				c ? la += d : L += V;
				D = E || ca(c ? la - l : d, D)
			}
			function d() {
				var k = Ja * 0.5;
				la = l;
				L = s;
				B = D = 0;
				if (!F) {
					var a, j, g, p = function(b) {
						F
								&& (F.translate(0, (g - I.totalHeight) * b), ec(
										Xa.chartInstance.jsVars._reflowData, {
											hcJSON : {
												legend : {
													scroll : {
														position : b
													}
												}
											}
										}, !0))
					};
					r && r.enabled ? (q = oa.g("legend-box").attr({
								zIndex : 10
							}).add(), a = w + k, j = aa = E - r.scrollBarWidth
							- r.scrollBarPadding, g = Ma - w - Ja, ba = oa
							.clipRect(0, a, j, g), o = oa.g("legend-container")
							.attr({
										zIndex : 1
									}).clip(ba).add(q), F = oa.g("legend")
							.add(o), Sa = oa.scroller(j + w - k, k, 10, g + 1,
							!1, !1, !1, q).attr({
								zIndex : 3,
								fill : I.legendScrollBgColor
							}).setScrollRatio((g + f) / I.totalHeight)
							.callback(p).add(q)) : o = q = F = oa.g("legend")
							.attr({
										zIndex : 10
									}).add();
					Sa && r.position && Sa.setScrollPosition(r.position);
					I.legendAllowDrag && (q.css({
								cursor : "move"
							}), za(q.element, "dragstart dragend", function(b) {
						q.movementBoundaryOrigin = Ja || 0;
						q.movementBoundaryX = jb - E - q.movementBoundaryOrigin;
						q.movementBoundaryY = eb - Ma
								- q.movementBoundaryOrigin;
						q.dragOffsetX = q.attr("translateX") - b.pageX;
						q.dragOffsetY = q.attr("translateY") - b.pageY;
						q.dragActive = !0;
						hb && hb.block(b.type === "dragstart")
					}), za(q.element, "drag", b))
				}
				I.title
						&& I.title.text !== N
						&& (Oa = oa.text(I.title.text, 0, 0).css(I.title.style)
								.attr({
											zIndex : 2,
											align : "center"
										}).add(F), k = Oa.getBBox(), Oa.align({
									align : "center",
									verticalAlign : "top",
									y : L
								}, !1, {
									x : 0,
									y : 0,
									width : aa,
									height : k.height
								}), L += (k.height || 0) + n);
				e = [];
				M(Q, function(b) {
							var k = b.options;
							k.showInLegend
									&& (k.legendType === "point" ? M(b.data,
											function(b) {
												b.showInLegend
														&& (e = e.concat(b))
											}) : e = e.concat(b))
						});
				zb(e, function(b, k) {
							return (b.options.legendIndex || 0)
									- (k.options.legendIndex || 0)
						});
				zc && e.reverse();
				M(e, u);
				ic = E || D;
				Pb = B - s + V;
				if (Ja || z) {
					if (xb) {
						if (ic > 0 && Pb > 0)
							xb[xb.isNew ? "attr" : "animate"](xb.crisp(null,
									null, null, ic, Ma)), xb.isNew = !1
					} else
						xb = oa.rect(0, 0, ic, Ma, I.borderRadius, Ja || 0)
								.attr({
											stroke : I.borderColor,
											"stroke-width" : Ja || 0,
											fill : z || T
										}).add(q).shadow(I.shadow, void 0,
										I.shadow), xb.isNew = !0;
					xb[e.length ? "show" : "hide"]()
				}
				k = ["left", "right", "top", "bottom"];
				for (j = 4; j--;)
					a = k[j], ka[a]
							&& ka[a] !== "auto"
							&& (I[j < 2 ? "align" : "verticalAlign"] = a, I[j < 2
									? "x"
									: "y"] = K(ka[a]) * (j % 2 ? -1 : 1));
				if (!c)
					I.y = (U.options.chart.marginTop - U.options.chart.marginBottom)
							/ 2;
				q.align(h(I, {
									width : ic,
									height : Ma
								}), !0, qa);
				Ob || x()
			}
			var I = U.options.legend;
			if (I.enabled) {
				var c = I.layout === "horizontal", j = I.symbolWidth, g = I.symbolPadding, e, ka = I.style, p = I.itemStyle, ta = I.itemHoverStyle, ja = I.itemHiddenStyle, f = I.padding
						|| 4, w = f * 0.5, va = K(p.fontSize) || 10, s = va + f, n = I.title.padding, v = I.textPadding, l = v
						+ f + j + 2 * g + I.initialItemX, r = I.scroll, Oa, Ya = -v
						- g - j, bb = -va + g, X = -v - g - j / 2, m = -va + g
						+ j / 2, o, q, da = [], t = 0, C = 0, xa = I.rowHeight, sa = I.legendNumColumns, Mb, ua, G, Ga, Na, Ma = I.height, ba, Sa, la, L, B, V = 0, xb, Ja = I.borderWidth, z = I.backgroundColor, F, D, E = I.width, aa = E, Q = U.series, zc = I.reversed;
				d();
				za(U, "endResize", x);
				return {
					colorizeItem : k,
					destroyItem : function(b) {
						var k = b.checkbox;
						M(["legendItem", "legendLine", "legendSymbol"],
								function(k) {
									b[k] && b[k].destroy()
								});
						k && ha(b.checkbox)
					},
					renderLegend : d,
					destroy : function() {
						xb && (xb = xb.destroy());
						F && (F = F.destroy());
						Sa && (Sa = Sa.destroy());
						ba && (ba = ba.destroy())
					}
				}
			}
		};
		nb = function(b, k) {
			return b >= 0 && b <= fb && k >= 0 && k <= db
		};
		mb = function(b, k) {
			return b >= 0 && b <= jb && k >= 0 && k <= eb
		};
		rc = function() {
			Ia(U, "selection", {
						resetSelection : !0
					}, Ic);
			U.toolbar.remove("zoom")
		};
		Ic = function(b) {
			var k = r.lang, a = U.pointCount < 100;
			U.toolbar.add("zoom", k.resetZoom, k.resetZoomTitle, rc);
			!b || b.resetSelection ? M(sb, function(b) {
						b.setExtremes(null, null, !1, a)
					}) : M(b.xAxis.concat(b.yAxis), function(b) {
						var k = b.axis;
						U.tracker[k.isXAxis ? "zoomX" : "zoomY"]
								&& k.setExtremes(b.min, b.max, !1, a)
					});
			va()
		};
		pc = function() {
			var k = b.legend, x = o(k.margin, 10), u = k.x, d = k.y, I = k.align, c = k.verticalAlign, j;
			fc();
			if ((U.title || U.subtitle) && !a(Wb))
				(j = ca(U.title && !Eb.floating && !Eb.verticalAlign && Eb.y
								|| 0, U.subtitle && !qc.floating
								&& !qc.verticalAlign && qc.y || 0))
						&& (Pa = ca(Pa, j + o(Eb.margin, 15) + Sb));
			k.enabled
					&& !k.floating
					&& (I === "right"
							? a(ea) || (P = ca(P, ic - u + x + $))
							: I === "left"
									? a(Q) || (Ka = ca(Ka, ic + u + x + Ac))
									: c === "top"
											? a(Wb)
													|| (Pa = ca(Pa, Pb + d + x
																	+ Sb))
											: c === "bottom"
													&& (a($b) || (Ha = ca(Ha,
															Pb - d + x + fa))));
			Zb && M(sb, function(b) {
						b.getOffset()
					});
			a(Q) || (Ka += Ea[3]);
			a(Wb) || (Pa += Ea[0]);
			a($b) || (Ha += Ea[2]);
			a(ea) || (P += Ea[1]);
			gc()
		};
		jc = function(b, k, a) {
			var x = U.title, u = U.subtitle;
			Ob += 1;
			kb(a, U);
			vc = eb;
			Hc = jb;
			U.chartWidth = jb = R(b);
			U.chartHeight = eb = R(k);
			A(Ra, {
						width : jb + S,
						height : eb + S
					});
			oa.setSize(jb, eb, a);
			fb = jb - Ka - P;
			db = eb - Pa - Ha;
			Rb = null;
			M(sb, function(b) {
						b.isDirty = !0;
						b.setScale()
					});
			M(ib, function(b) {
						b.isDirty = !0
					});
			U.isDirtyLegend = !0;
			U.isDirtyBox = !0;
			pc();
			x && x.align(null, null, qa);
			u && u.align(null, null, qa);
			va(a);
			vc = null;
			Ia(U, "resize");
			xa === !1 ? ua() : setTimeout(ua, xa && xa.duration || 500)
		};
		gc = function() {
			U.plotLeft = Ka = R(Ka);
			U.plotTop = Pa = R(Pa);
			U.plotWidth = fb = R(jb - Ka - P);
			U.plotHeight = db = R(eb - Pa - Ha);
			U.plotSizeX = Za ? db : fb;
			U.plotSizeY = Za ? fb : db;
			qa = {
				x : Ac,
				y : Sb,
				width : jb - Ac - $,
				height : eb - Sb - fa
			}
		};
		fc = function() {
			Pa = o(Wb, Sb);
			P = o(ea, $);
			Ha = o($b, fa);
			Ka = o(Q, Ac);
			Ea = [0, 0, 0, 0]
		};
		dc = function() {
			var b = la.borderWidth || 0, k = la.backgroundColor, a = la.plotBackgroundColor, x = la.plotBackgroundImage, u = la.bgSWF, d = la.bgSWFAlpha
					/ 100, I = la.bgImageDisplayMode, c = la.bgImageVAlign, j = la.bgImageHAlign, g = la.bgImageScale, e = la.logoURL, ka = la.logoAlpha
					/ 100, p = la.logoPosition, ta = la.logoLink, ja = la.logoScale, f = la.logoLeftMargin, h = la.logoTopMargin, w = la._chartBGImageGroup, va = la._chartBGImage
					|| [], s = la._chartLogoImageGroup, n = la._logoTracker, v = la._chartLogoImage, l, r, Oa = {
				x : Ka,
				y : Pa,
				width : fb,
				height : db
			};
			l = b + (la.shadow ? 8 : 0);
			r = l % 2;
			if (b || k)
				mc
						? mc
								.animate(mc.crisp(null, null, null, jb - l, eb
												- l))
						: mc = oa.rect(l / 2, l / 2, jb - l + r, eb - l + r,
								la.borderRadius, b).attr({
									stroke : la.borderColor,
									"stroke-width" : b,
									fill : k || T
								}).add().shadow(la.shadow, void 0, la.shadow);
			k = oa.clipRect(b, b, jb - b * 2, eb - b * 2);
			if (u && !Va) {
				var Ya = new Image, bb, X = 1, q = 1, m, o;
				l = 0;
				if (w) {
					w.renderer = oa;
					Wa = w;
					Va = va;
					for (va = Va.length; l < va; l += 1)
						r = Va[l], r.renderer = oa;
					w.clip(k).add()
				} else
					Wa || (Wa = oa.g("group").attr({
								visibility : gb
							}).clip(k).add()), Va = [], Ya.onload = function() {
						bb = $a(I, c, j, g, b, jb, eb, Ya);
						if (bb.tileInfo) {
							X = bb.tileInfo.xCount;
							q = m = bb.tileInfo.yCount;
							o = bb.y;
							for (delete bb.tileInfo; X;) {
								m -= 1;
								if (m == 0)
									m = q, X -= 1, bb.x += bb.width, bb.y = o;
								Va[void 0] = Wa.renderer.image(u).attr(bb).css(
										{
											opacity : d
										}).add(Wa.attr({
											visibility : gb
										}));
								bb.y += bb.height
							}
						} else
							Va[0] = Wa.renderer.image(u).attr(bb).css({
										opacity : d
									}).add(Wa.attr({
										visibility : gb
									}))
					}, Ya.src = u;
				U._chartBGImageGroup = Wa;
				U._chartBGImage = Va
			}
			a
					&& (lc ? lc.animate(Oa) : lc = oa.rect(Ka, Pa, fb, db,
							O(la.plotBorderRadius, 0)).attr({
								fill : a
							}).add().shadow(la.plotShadow, void 0,
							la.plotShadow));
			x && (Kc ? Kc.animate(Oa) : Kc = oa.image(x, Ka, Pa, fb, db).add());
			if (la.plotBorderWidth)
				a = la.plotBorderWidth, x = a * 0.5, x = {
					x : Ka - x,
					y : Pa - x,
					width : fb + a,
					height : db + a,
					r : O(la.plotBorderRadius, 0)
				}, bc
						? bc.animate(bc
								.crisp(null, x.x, x.y, x.width, x.height))
						: bc = oa.rect(x.x, x.y, x.width, x.height, x.r, a)
								.attr({
											stroke : la.plotBorderColor,
											"stroke-width" : a,
											"stroke-linejoin" : "round",
											zIndex : 2
										}).add();
			if (e && !ab) {
				var t = new Image, da, C, xa, sa;
				if (s) {
					s.renderer = oa;
					cb = s;
					s.clip(k).add();
					if (n)
						n.renderer = oa, sa = n, sa.add(), sa._chart = U;
					v.renderer = oa;
					ab = v
				} else {
					switch (p) {
						case "tr" :
							C = F;
							xa = na;
							break;
						case "bl" :
							C = Z;
							xa = wa;
							break;
						case "br" :
							C = Z;
							xa = na;
							break;
						case "cc" :
							xa = C = kc;
							break;
						default :
							C = F, xa = wa
					}
					cb || (cb = oa.g("group").attr({
								visibility : V,
								zIndex : 7
							}).clip(k).add());
					if (ta)
						sa = oa.rect(0, 0, 1, 1, 0).attr({
									isTracker : !0,
									stroke : Gb,
									fill : Gb,
									"stroke-width" : 0,
									visibility : gb,
									zIndex : 10
								}).css({
									cursor : "pointer",
									_cursor : "hand"
								}).add(), sa._chart = U, sa.on("mouseover",
								function() {
									sa && sa._chart.tooltip
											&& sa._chart.tooltip.hide()
								}).on("click", function() {
									la.events.click.call({
												link : ta
											})
								});
					ab = oa.image(e);
					t.onload = function() {
						da = $a("none", C, xa, ja, b, jb, eb, t);
						ab.attr(da).translate(f, h).css({
									opacity : ka
								}).add(cb.attr({
									visibility : gb
								}));
						if (ta)
							da.r = 0, sa.attr(da)
					};
					t.src = e
				}
				U._chartLogoImageGroup = cb;
				U._logoTracker = sa;
				U._chartLogoImage = ab
			}
			U.isDirtyBox = !1
		};
		za(lb, "unload", Ga);
		la.reflow !== !1 && za(U, "load", q);
		if (Ma)
			for (qb in Ma)
				za(U, qb, Ma[qb]);
		U.options = b;
		U.series = ib;
		U.addSeries = function(b, k, a) {
			var x;
			b && (kb(a, U), k = o(k, !0), Ia(U, "addSeries", {
						options : b
					}, function() {
						x = ka(b);
						x.isDirty = !0;
						U.isDirtyLegend = !0;
						k && U.redraw()
					}));
			return x
		};
		U.animation = o(la.animation, !0);
		U.destroy = Ga;
		U.get = function(b) {
			var k, a, x;
			for (k = 0; k < sb.length; k++)
				if (sb[k].options.id === b)
					return sb[k];
			for (k = 0; k < ib.length; k++)
				if (ib[k].options.id === b)
					return ib[k];
			for (k = 0; k < ib.length; k++) {
				x = ib[k].data;
				for (a = 0; a < x.length; a++)
					if (x[a].id === b)
						return x[a]
			}
			return null
		};
		U.getSelectedPoints = function() {
			var b = [];
			M(ib, function(k) {
						b = b.concat(pa(k.data, function(b) {
									return b.selected
								}))
					});
			return b
		};
		U.getSelectedSeries = function() {
			return pa(ib, function(b) {
						return b.selected
					})
		};
		U.hideLoading = function() {
			Bc(rb, {
						opacity : 0
					}, {
						duration : b.loading.hideDuration,
						complete : function() {
							A(rb, {
										display : T
									})
						}
					});
			Db = !1
		};
		U.isInsidePlot = nb;
		U.redraw = va;
		U.setSize = jc;
		U.setTitle = n;
		U.showLoading = function(k) {
			var a = b.loading, x = a.labelStyle;
			rb || (rb = J(Ja, {
						className : "highcharts-loading"
					}, h(a.style, {
								left : 0,
								top : 0,
								width : jb + S,
								height : eb + S,
								zIndex : 22,
								display : T
							}), Ra), h(x, {
						top : eb / 2 - 3 + S
					}), Ab = J("span", null, x, rb));
			Ab.innerHTML = k || b.lang.loading;
			Db || (A(rb, {
						opacity : 0,
						display : ""
					}), Bc(rb, {
						opacity : a.style.opacity
					}, {
						duration : a.showDuration
					}), Db = !0)
		};
		U.pointCount = 0;
		U.counters = new W;
		aa()
	}
	function Xa(b, k, a, u, d, c) {
		var j = ga.atan((k - u) / (b - a)), g = [];
		j < 0 && (j = 2 * ga.PI + j);
		if (u > k) {
			if (a >= b && j > ga.PI || a < b && j > ga.PI)
				j -= ga.PI
		} else if (a >= b && j < ga.PI && j != 0 || a < b && j < ga.PI)
			j += ga.PI;
		typeof c == "undefined"
				? (a = b + d * Ea(j), d = k + d * P(j))
				: (d = Da(d) / 2, c = Da(c) / 2, a = b + (d = b < a ? d : -d), d = k
						+ d * ga.tan(j), Da(k - d) > Da(c)
						&& (d = k + (c = k < u ? c : -c), a = b + c / ga.tan(j)));
		g.push(Aa);
		g.push(a + 10 * Ea(j + 0.79));
		g.push(d + 10 * P(j + 0.79));
		g.push(ra);
		g.push(a);
		g.push(d);
		g.push(a + 10 * Ea(j - 0.79));
		g.push(d + 10 * P(j - 0.79));
		return g
	}
	var Ua = CnbiSoft(["private", "modules.renderer.highcharts-src"]);
	if (Ua !== void 0) {
		var Q = Ua.hcLib, E = Q.pluck, O = Q.pluckNumber, fa = Q.graphics.getDarkColor, Va = Q.graphics.getLightColor, hb = Q.graphics.convertColor, ab = Q.graphics.getAngle, Wa = Q.regex.dropHash, rb = Q.regex.startsRGBA, Ab = Q.regex.hexcode, ub = Q.HASHSTRING, N = Q.BLANKSTRING, $a = Q.setImageDisplayMode, F = Q.POSITION_TOP, na = Q.POSITION_RIGHT, Z = Q.POSITION_BOTTOM, wa = Q.POSITION_LEFT, kc = Q.POSITION_MIDDLE, ec = Q.extend2, fc = Q.getValidValue, Xb = Q.toPrecision, Ub = Q.COLOR_TRANSPARENT, mb = Q.getFirstColor, cb = Q.COMMASTRING, qa = {
			column3d : function(b, k) {
				var a, u, d = 0, c, j, g, e = [];
				a = 0;
				for (u = b.length; a < u; a += 1)
					d = ca(b[a].data.length, d);
				if (d > 0) {
					j = b[0];
					k = j.chart;
					j.initGroup();
					g = k.column3DStacked = E(j.options.stacking,
							k.options.plotOptions.column3d
									&& k.options.plotOptions.column3d.stacking,
							k.options.plotOptions.series.stacking) !== void 0
							? !0
							: !1;
					for (a = 0; a < d; a += 1) {
						c = 0;
						for (u = b.length; c < u; c += 1)
							j = b[c], (j = j.data[a])
									&& j.y !== null
									&& (j.y < 0 && g ? e.push(c) : b[c]
											.drawNthPoint(a));
						if (g)
							for (u = e.length - 1; u >= 0; u -= 1)
								b[e.pop()].drawNthPoint(a)
					}
					c = 0;
					for (u = b.length; c < u; c += 1)
						b[c].render()
				}
			},
			bar3d : function(b, k) {
				var a, u, d = 0, c, j, g = [];
				a = 0;
				for (u = b.length; a < u; a += 1)
					d = ca(b[a].data.length, d);
				if (d > 0) {
					c = b[0];
					k = c.chart;
					c.initGroup();
					j = k.column3DStacked = E(c.options.stacking,
							k.options.plotOptions.column3d
									&& k.options.plotOptions.column3d.stacking,
							k.options.plotOptions.series.stacking) !== void 0
							? !0
							: !1;
					for (a = d - 1; a >= 0; a -= 1) {
						d = 0;
						for (u = b.length; d < u; d += 1)
							c = b[d], (c = c.data[a])
									&& c.y !== null
									&& (c.y <= 0 && j ? g.push(d) : b[d]
											.drawNthPoint(a));
						if (j)
							for (u = g.length - 1; u >= 0; u -= 1)
								b[g.pop()].drawNthPoint(a)
					}
					d = 0;
					for (u = b.length; d < u; d += 1)
						b[d].render()
				}
			},
			common : function() {
			}
		}, gc = {
			column3d : !0,
			bar3d : !0,
			area3d : !0,
			line3d : !0
		}, Dc = function(b, k, a) {
			var u = 0, d = 0, c = 0, j = 0, g = 0, e, p = b.xDepth, f = b.yDepth, h = b.options.chart.series2D3Dshift, w = 0, s = 0;
			if (k.column3d)
				u = k.column3d.length;
			if (k.bar3d)
				j = k.bar3d.length;
			if (k.area3d)
				d = k.area3d.length;
			if (k.line3d)
				c = k.line3d.length;
			g = a ? (u ? 1 : 0) + (j ? 1 : 0) + (d ? 1 : 0) + (c ? 1 : 0) : (u
					? 1
					: 0)
					+ (j ? 1 : 0) + d + c;
			b.num3dSeriesType = g;
			s = w = 0;
			u = f / g;
			p /= g;
			for (e in k)
				if (gc[e]) {
					d = k[e];
					c = e === "column3d" || e === "bar3d" || a ? !1 : !0;
					w += p;
					s += u;
					g = 0;
					for (j = d.length; g < j; g += 1)
						f = d[g], f.depthXDisplacement = -w, f.depthYDisplacement = s, c
								? (w += f.xDepth = p, s += f.yDepth = u)
								: (f.xDepth = p, f.yDepth = u);
					g = qa[e] ? qa[e] : qa.common;
					g(d, b);
					delete k[e]
				}
			for (e in k) {
				u = b.plotLeft - w;
				p = h ? b.plotTop + s : b.plotTop;
				g = 0;
				for (a = k[e].length; g < a; g += 1)
					k[e][g].options.zIndex = 4, k[e][g].render(), k[e][g].group
							.translate(u, p)
			}
		}, Qa = document, lb = window, ga = Math, R = ga.round, yb = ga.floor, Qb = ga.ceil, ca = ga.max, pb = ga.min, Da = ga.abs, Ea = ga.cos, P = ga.sin, qb = ga.PI, Nb = ga.sqrt, Cb = qb
				/ 180, Kb = ga.atan2, Ob = qb / 2, Vb = qb * 1.5, Pb = qb * 2, Db = navigator.userAgent, d = /msie/i
				.test(Db)
				&& !lb.opera, j = Qa.documentMode === 8, p = /AppleWebKit/
				.test(Db), c = /Firefox/.test(Db), g = !!Qa.createElementNS
				&& !!Qa.createElementNS("http://www.w3.org/2000/svg", "svg").createSVGRect, w = c
				&& parseInt(Db.split("Firefox/")[1], 10) < 4, s, da = Qa.documentElement.ontouchstart !== void 0, n = {}, v = 0, X = 1, ua, r, sa, xa, Sa, C, Ja = "div", ba = "absolute", G = "relative", V = "hidden", Fb = "highcharts-", gb = j
				? "visible"
				: "", S = "px", T = "none", Aa = "M", ra = "L", Gb = "rgba(192,192,192,"
				+ (g ? 1.0E-6 : 0.0020) + ")", Ba = "", wb = "hover", sc, Ec, L, Y, oc, tc, tb, Lc, Mc, Fc, Nc, Oc, ea = lb.HighchartsAdapter, aa = ea
				|| {}, M = aa.each, pa = aa.grep, hc = aa.map, ia = aa.merge, za = aa.addEvent, ya = aa.removeEvent, Ia = aa.fireEvent, ac = aa.getTouchEvent, Bc = aa.animate, wc = aa.stop, Fa = {};
		sa = function(b, k, x) {
			function u(b) {
				return b.toString().replace(/^([0-9])$/, "0$1")
			}
			if (!a(k) || isNaN(k))
				return "Invalid date";
			var b = o(b, "%Y-%m-%d %H:%M:%S"), k = new Date(k * X), d, c = k[L](), j = k[Y](), g = k[oc](), e = k[tc](), p = k[tb](), f = r.lang, h = f.weekdays, k = {
				a : h[j].substr(0, 3),
				A : h[j],
				d : u(g),
				e : g,
				b : f.shortMonths[e],
				B : f.months[e],
				m : u(e + 1),
				y : p.toString().substr(2, 2),
				Y : p,
				H : u(c),
				I : u(c % 12 || 12),
				l : c % 12 || 12,
				M : u(k[Ec]()),
				p : c < 12 ? "AM" : "PM",
				P : c < 12 ? "am" : "pm",
				S : u(k.getSeconds())
			};
			for (d in k)
				b = b.replace("%" + d, k[d]);
			return x ? b.substr(0, 1).toUpperCase() + b.substr(1) : b
		};
		W.prototype = {
			wrapColor : function(b) {
				if (this.color >= b)
					this.color = 0
			},
			wrapSymbol : function(b) {
				if (this.symbol >= b)
					this.symbol = 0
			}
		};
		Sa = {
			init : function(b, k, a) {
				var k = k || "", u = b.shift, d = k.indexOf("C") > -1, c = d
						? 7
						: 3, j, k = k.split(" "), a = [].concat(a), g, e, p = function(
						b) {
					for (j = b.length; j--;)
						b[j] === Aa
								&& b.splice(j + 1, 0, b[j + 1], b[j + 2], b[j
												+ 1], b[j + 2])
				};
				d && (p(k), p(a));
				b.isArea
						&& (g = k.splice(k.length - 6, 6), e = a.splice(
								a.length - 6, 6));
				if (u)
					a = [].concat(a).splice(0, c).concat(a), b.shift = !1;
				if (k.length)
					for (b = a.length; k.length < b;)
						u = [].concat(k).splice(k.length - c, c), d
								&& (u[c - 6] = u[c - 2], u[c - 5] = u[c - 1]), k = k
								.concat(u);
				g && (k = k.concat(g), a = a.concat(e));
				return [k, a]
			},
			step : function(b, k, a, u) {
				var d = [], c = b.length;
				if (a === 1)
					d = u;
				else if (c === k.length && a < 1)
					for (; c--;)
						u = parseFloat(b[c]), d[c] = isNaN(u) ? b[c] : a
								* parseFloat(k[c] - u) + u;
				else
					d = k;
				return d
			}
		};
		ea && ea.init && ea.init(Sa);
		if (!ea && lb.jQuery) {
			var Hb = jQuery, M = Q.each = function(b, k) {
				for (var a = 0, u = b.length; a < u; a++)
					if (k.call(b[a], b[a], a, b) === !1)
						return a
			}, pa = Hb.grep, hc = function(b, k) {
				for (var a = [], u = 0, d = b.length; u < d; u++)
					a[u] = k.call(b[u], b[u], u, b);
				return a
			}, ia = Q.merge = function() {
				var b = arguments;
				return Hb.extend(!0, null, b[0], b[1], b[2], b[3])
			}, za = function(b, k, a, u) {
				Hb(b).bind(k, u, a)
			}, ya = function(b, k, a) {
				var u = Qa.removeEventListener
						? "removeEventListener"
						: "detachEvent";
				Qa[u] && !b[u] && (b[u] = function() {
				});
				Hb(b).unbind(k, a)
			}, Ia = function(b, k, a, u) {
				var d = Hb.Event(k), c = "detached" + k;
				h(d, a);
				b[k] && (b[c] = b[k], b[k] = null);
				Hb(b).trigger(d);
				b[c] && (b[k] = b[c], b[c] = null);
				u && !d.isDefaultPrevented() && u(d)
			}, ac = function(b) {
				return da && b.sourceEvent && b.sourceEvent.touches
						&& b.sourceEvent.touches[0] || b
			}, Bc = function(b, k, a) {
				var u = Hb(b);
				if (k.d)
					b.toD = k.d, k.d = 1;
				u.stop(!1, !0);
				u.animate(k, a)
			}, wc = function(b) {
				Hb(b).stop()
			};
			Hb.extend(Hb.easing, {
						easeOutQuad : function(b, k, a, u, d) {
							return -u * (k /= d) * (k - 2) + a
						}
					});
			var ea = jQuery.fx, aa = ea.step, bc = ea.prototype.cur;
			M(		[[aa, "_default"], [aa, "width"], [aa, "height"],
							[ea.prototype, "cur"]], function(b) {
						var k, a = b[0], u = b[1], d = a[u], c;
						d && (a[u] = function(b) {
							u === "cur" && (b = this);
							c = b.elem;
							return k = c.attr ? c.attr(b.prop, b.now) : d
									.apply(this, arguments)
						})
					});
			aa.d = function(b) {
				var k = b.elem;
				if (!b.started) {
					var a = Sa.init(k, k.d, k.toD);
					b.start = a[0];
					b.end = a[1];
					b.started = !0
				}
				k.attr("d", Sa.step(b.start, b.end, b.pos, k.toD))
			};
			Hb.fx.prototype.cur = function() {
				var b = this.elem;
				return b.attr ? b.attr(this.prop) : bc.apply(this, arguments)
			}
		}
		Sa = {
			init : function(b, k, a) {
				var k = k || "", u = b.shift, d = k.indexOf("C") > -1, c = d
						? 7
						: 3, j, k = k.split(" "), a = [].concat(a), g, e, p = function(
						b) {
					for (j = b.length; j--;)
						b[j] === Aa
								&& b.splice(j + 1, 0, b[j + 1], b[j + 2], b[j
												+ 1], b[j + 2])
				};
				d && (p(k), p(a));
				b.isArea
						&& (g = k.splice(k.length - 6, 6), e = a.splice(
								a.length - 6, 6));
				if (u)
					a = [].concat(a).splice(0, c).concat(a), b.shift = !1;
				if (k.length)
					for (b = a.length; k.length < b;)
						u = [].concat(k).splice(k.length - c, c), d
								&& (u[c - 6] = u[c - 2], u[c - 5] = u[c - 1]), k = k
								.concat(u);
				g && (k = k.concat(g), a = a.concat(e));
				return [k, a]
			},
			step : function(b, k, a, u) {
				var d = [], c = b.length;
				if (a === 1)
					d = u;
				else if (c === k.length && a < 1)
					for (; c--;)
						u = parseFloat(b[c]), d[c] = isNaN(u) ? b[c] : a
								* parseFloat(k[c] - u) + u;
				else
					d = k;
				return d
			}
		};
		ea = {
			enabled : !0,
			align : "center",
			x : 0,
			y : 15,
			style : {
				color : "#666",
				fontSize : "11px",
				lineHeight : "14px"
			}
		};
		r = {
			colors : ["#4572A7", "#AA4643", "#89A54E", "#80699B", "#3D96AE",
					"#DB843D", "#92A8CD", "#A47D7C", "#B5CA92"],
			symbols : ["circle", "diamond", "square", "triangle",
					"triangle-down"],
			lang : {
				loading : "Loading...",
				months : ["January", "February", "March", "April", "May",
						"June", "July", "August", "September", "October",
						"November", "December"],
				shortMonths : ["Jan", "Feb", "Mar", "Apr", "May", "June",
						"Jul", "Aug", "Sep", "Oct", "Nov", "Dec"],
				weekdays : ["Sunday", "Monday", "Tuesday", "Wednesday",
						"Thursday", "Friday", "Saturday"],
				decimalPoint : ".",
				resetZoom : "Reset zoom",
				resetZoomTitle : "Reset zoom level 1:1",
				thousandsSep : ","
			},
			callbacks : [],
			global : {
				useUTC : !0
			},
			chart : {
				nativeZoom : !0,
				reflow : !1,
				borderColor : "#4572A7",
				borderRadius : 5,
				defaultSeriesType : "line",
				ignoreHiddenSeries : !0,
				spacingTop : 10,
				spacingRight : 10,
				spacingBottom : 15,
				spacingLeft : 10,
				style : {
					fontFamily : '"Lucida Grande", "Lucida Sans Unicode", Verdana, Arial, Helvetica, sans-serif',
					fontSize : "12px",
					cursor : "default",
					"font-weight" : "normal",
					"font-style" : "normal"
				},
				backgroundColor : "#FFFFFF",
				plotBorderColor : "#C0C0C0"
			},
			title : {
				text : "Chart title",
				align : "center",
				y : 15,
				style : {
					color : "#3E576F",
					fontSize : "16px"
				}
			},
			subtitle : {
				text : "",
				align : "center",
				y : 30,
				style : {
					color : "#6D869F"
				}
			},
			plotOptions : {
				line : {
					allowPointSelect : !1,
					showCheckbox : !1,
					animation : {
						duration : 1E3
					},
					events : {},
					lineWidth : 2,
					shadow : !0,
					marker : {
						enabled : !0,
						lineWidth : 0,
						radius : 4,
						lineColor : "#FFFFFF",
						states : {
							hover : {},
							select : {
								fillColor : "#FFFFFF",
								lineColor : "#000000",
								lineWidth : 2
							}
						}
					},
					point : {
						events : {}
					},
					dataLabels : ia(ea, {
								enabled : !1,
								y : -6,
								formatter : function() {
									return this.y
								}
							}),
					showInLegend : !0,
					states : {
						hover : {
							marker : {}
						},
						select : {
							marker : {}
						}
					},
					stickyTracking : !0
				}
			},
			labels : {
				style : {
					position : ba,
					color : "#3E576F"
				}
			},
			legend : {
				enabled : !0,
				align : "center",
				layout : "horizontal",
				labelFormatter : function() {
					return this.name
				},
				borderWidth : 1,
				borderColor : "#909090",
				borderRadius : 5,
				shadow : !1,
				style : {
					padding : "5px"
				},
				itemStyle : {
					cursor : "pointer",
					color : "#3E576F"
				},
				itemHoverStyle : {
					cursor : "pointer"
				},
				itemHiddenStyle : {
					color : "#C0C0C0"
				},
				itemCheckboxStyle : {
					position : ba,
					width : "13px",
					height : "13px"
				},
				symbolWidth : 16,
				symbolPadding : 5,
				verticalAlign : "bottom",
				x : 0,
				y : 0
			},
			loading : {
				hideDuration : 100,
				labelStyle : {
					position : G,
					fontFamily : "Verdana",
					fontSize : "10px",
					color : "#ffffff"
				},
				showDuration : 100,
				style : {
					position : ba,
					backgroundColor : "black",
					opacity : 0.2,
					textAlign : "center"
				}
			},
			tooltip : {
				enabled : !0,
				backgroundColor : "rgba(255, 255, 255, .85)",
				borderWidth : 2,
				borderRadius : 5,
				shadow : !0,
				snap : da ? 25 : 10,
				style : {
					color : "#333333",
					fontSize : "12px",
					padding : "5px",
					whiteSpace : "nowrap"
				}
			},
			toolbar : {
				itemStyle : {
					color : "#4572A7",
					cursor : "pointer"
				}
			},
			credits : {
				enabled : !0,
				text : "Highcharts.com",
				href : "http://www.highcharts.com",
				position : {
					align : "right",
					x : -10,
					verticalAlign : "bottom",
					y : -5
				},
				style : {
					cursor : "pointer",
					color : "#909090",
					fontSize : "10px"
				}
			}
		};
		var uc = {
			dateTimeLabelFormats : {
				second : "%H:%M:%S",
				minute : "%H:%M",
				hour : "%H:%M",
				day : "%e. %b",
				week : "%e. %b",
				month : "%b '%y",
				year : "%Y"
			},
			endOnTick : !1,
			gridLineColor : "#C0C0C0",
			labels : ea,
			lineColor : "#C0D0E0",
			lineWidth : 1,
			max : null,
			min : null,
			minPadding : 0.01,
			maxPadding : 0.01,
			minorGridLineColor : "#E0E0E0",
			minorGridLineWidth : 1,
			minorTickColor : "#A0A0A0",
			minorTickLength : 2,
			minorTickPosition : "outside",
			startOfWeek : 1,
			startOnTick : !1,
			tickColor : "#C0D0E0",
			tickLength : 5,
			tickmarkPlacement : "between",
			tickPixelInterval : 100,
			tickPosition : "outside",
			tickWidth : 1,
			title : {
				align : "middle",
				style : {
					color : "#6D869F",
					fontWeight : "bold"
				}
			},
			type : "linear"
		}, Gc = ia(uc, {
					endOnTick : !0,
					gridLineWidth : 1,
					tickPixelInterval : 72,
					showLastLabel : !0,
					labels : {
						align : "right",
						x : -8,
						y : 3
					},
					lineWidth : 0,
					maxPadding : 0.05,
					minPadding : 0.05,
					startOnTick : !0,
					tickWidth : 0,
					title : {
						rotation : 270,
						text : "Y-values"
					},
					stackLabels : {
						enabled : !1,
						formatter : function() {
							return this.total
						},
						style : ea.style
					}
				}), Tc = {
			labels : {
				align : "right",
				x : -8,
				y : null
			},
			title : {
				rotation : 270
			}
		}, Sc = {
			labels : {
				align : "left",
				x : 8,
				y : null
			},
			title : {
				rotation : 90
			}
		}, Pc = {
			labels : {
				align : "center",
				x : 0,
				y : 14
			},
			title : {
				rotation : 0
			}
		}, Rc = ia(Pc, {
					labels : {
						y : -5
					}
				}), Ha = Q.defaultPlotOptions = r.plotOptions, ea = Ha.line;
		Ha.spline = ia(ea);
		Ha.scatter = ia(ea, {
					lineWidth : 0,
					states : {
						hover : {
							lineWidth : 0
						}
					}
				});
		Ha.area = ia(ea, {});
		Ha.areaspline = ia(Ha.area);
		Ha.column = ia(ea, {
					borderColor : "#FFFFFF",
					borderWidth : 1,
					borderRadius : 0,
					groupPadding : 0.2,
					marker : null,
					pointPadding : 0.1,
					minPointLength : 0,
					states : {
						hover : {
							brightness : 0.1,
							shadow : !1
						},
						select : {
							color : "#C0C0C0",
							borderColor : "#000000",
							shadow : !1
						}
					},
					dataLabels : {
						y : null,
						verticalAlign : null
					}
				});
		Ha.bar = ia(Ha.column, {
					dataLabels : {
						align : "left",
						x : 5,
						y : 0
					}
				});
		Ha.pie = ia(ea, {
					borderColor : "#FFFFFF",
					borderWidth : 1,
					center : ["50%", "50%"],
					colorByPoint : !0,
					dataLabels : {
						distance : 30,
						enabled : !0,
						formatter : function() {
							return this.point.name
						},
						y : 5
					},
					legendType : "point",
					marker : null,
					size : "75%",
					showInLegend : !1,
					slicedOffset : 10,
					states : {
						hover : {
							brightness : 0.1,
							shadow : !1
						}
					}
				});
		$();
		var ob = function(b) {
			var k = [], a;
			(function(b) {
				(a = /rgba\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]?(?:\.[0-9]+)?)\s*\)/
						.exec(b))
						? k = [K(a[1]), K(a[2]), K(a[3]), parseFloat(a[4])]
						: (a = /#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/
								.exec(b))
								&& (k = [K(a[1], 16), K(a[2], 16), K(a[3], 16),
										1])
			})(b);
			return {
				get : function(a) {
					return k && !isNaN(k[0]) ? a === "rgb" ? "rgb(" + k[0]
							+ "," + k[1] + "," + k[2] + ")" : a === "hex" ? "#"
							+ ("000000" + (k[0] << 16 | k[1] << 8 | k[2])
									.toString(16)).slice(-6) : a === "a"
							? k[3]
							: "rgba(" + k.join(",") + ")" : b
				},
				brighten : function(b) {
					if (Ta(b) && b !== 0) {
						var a;
						for (a = 0; a < 3; a++)
							k[a] += K(b * 255), k[a] < 0 && (k[a] = 0), k[a] > 255
									&& (k[a] = 255)
					}
					return this
				},
				setOpacity : function(b) {
					k[3] = b;
					return this
				}
			}
		};
		La.prototype = {
			init : function(b, k) {
				this.element = Qa.createElementNS("http://www.w3.org/2000/svg",
						k);
				this.renderer = b
			},
			animate : function(b, k, a) {
				if (k = o(k, xa, !0)) {
					k = ia(k);
					if (a)
						k.complete = a;
					Bc(this, b, k)
				} else
					this.attr(b), a && a()
			},
			attr : function(b, k) {
				var x, u, d, c, j, g = this.element, e = g.nodeName, w = this.renderer, s, n = this.shadows, v = this.htmlNode, l, r = this;
				z(b) && a(k) && (x = b, b = {}, b[x] = k);
				if (z(b))
					x = b, e === "circle" ? x = {
						x : "cx",
						y : "cy"
					}[x] || x : x === "strokeWidth" && (x = "stroke-width"), r = f(
							g, x)
							|| this[x] || 0, x !== "d" && x !== "visibility"
							&& (r = parseFloat(r));
				else
					for (x in b) {
						s = !1;
						u = b[x];
						if (x === "d")
							u && u.join && (u = u.join(" ")), /(NaN| {2}|^$)/
									.test(u)
									&& (u = "M 0 0"), this.d = u;
						else if (x === "x" && e === "text") {
							for (d = 0; d < g.childNodes.length; d++)
								c = g.childNodes[d], f(c, "x") === f(g, "x")
										&& f(c, "x", u);
							this.rotation
									&& f(g, "transform", "rotate("
													+ this.rotation + " " + u
													+ " " + K(b.y || f(g, "y"))
													+ ")")
						} else if (x === "fill")
							u = w.color(u, g, x);
						else if (e === "circle" && (x === "x" || x === "y"))
							x = {
								x : "cx",
								y : "cy"
							}[x] || x;
						else if (x === "translateX" || x === "translateY"
								|| x === "rotation" || x === "verticalAlign")
							this[x] = u, this.updateTransform(), s = !0;
						else if (x === "stroke")
							u = w.color(u, g, x);
						else if (x === "dashstyle")
							if (x = "stroke-dasharray", u = u
									&& u.toLowerCase(), u === "solid")
								u = T;
							else {
								if (u) {
									u = u.replace("shortdashdotdot",
											"3,1,1,1,1,1,").replace(
											"shortdashdot", "3,1,1,1").replace(
											"shortdot", "1,1,").replace(
											"shortdash", "3,1,").replace(
											"longdash", "8,3,").replace(/dot/g,
											"1,3,").replace("dash", "4,3,")
											.replace(/,$/, "").split(",");
									for (d = u.length; d--;)
										u[d] = parseFloat(u[d])
												* O(b["stroke-width"],
														b.strokeWidth, f(this,
																"stroke-width"));
									u = u.join(",")
								}
							}
						else
							x === "isTracker"
									? this[x] = u
									: x === "width"
											? u = K(u)
											: x === "align"
													? (x = "text-anchor", u = {
														left : "start",
														center : "middle",
														right : "end"
													}[u])
													: x === "title"
															&& (d = Qa
																	.createElementNS(
																			"http://www.w3.org/2000/svg",
																			"title"), d
																	.appendChild(Qa
																			.createTextNode(u)), g
																	.appendChild(d));
						x === "strokeWidth" && (x = "stroke-width");
						p && x === "stroke-width" && u === 0 && (u = 1.0E-6);
						this.symbolName && /^(x|y|r|start|end|innerR)/.test(x)
								&& (l || (this.symbolAttr(b), l = !0), s = !0);
						if (n && (x === "opacity" || x === "stroke-opacity")) {
							j = 0.06 * u;
							d = 0;
							for (c = n.length; d < c;)
								f(n[d], x, (d += 1) * j)
						}
						if (n && /^(width|height|visibility|x|y|d)$/.test(x))
							for (d = n.length; d--;)
								f(n[d], x, u);
						if ((x === "width" || x === "height") && e === "rect"
								&& u < 0)
							u = 0;
						x === "text" ? (this.textStr = u, this.added
								&& w.buildText(this)) : s || f(g, x, u);
						if (v
								&& (x === "x" || x === "y"
										|| x === "translateX"
										|| x === "translateY" || x === "visibility")) {
							d = v.length ? v : [this];
							c = d.length;
							for (j = 0; j < c; j++)
								v = d[j], s = v.getBBox(), v = v.htmlNode, A(v,
										h(this.styles, {
													left : s.x
															+ (this.translateX || 0)
															+ S,
													top : s.y
															+ (this.translateY || 0)
															+ S
												})), x === "visibility"
										&& A(v, {
													visibility : u
												})
						}
					}
				return r
			},
			symbolAttr : function(b) {
				var k = this;
				M(		["x", "y", "r", "start", "end", "width", "height",
								"innerR", "startAngle"], function(a) {
							k[a] = o(b[a], k[a])
						});
				k.attr({
							d : k.renderer.symbols[k.symbolName](
									R(k.x * 2) / 2, R(k.y * 2) / 2, k.r, {
										start : k.start,
										end : k.end,
										width : k.width,
										height : k.height,
										innerR : k.innerR,
										startAngle : k.startAngle
									})
						})
			},
			clip : function(b) {
				return this.attr("clip-path", "url('" + this.renderer.url + "#"
								+ b.id + "')")
			},
			crisp : function(b, k, a, u, d) {
				var c, j = {}, g = {}, e, b = b || this.strokeWidth || 0;
				e = b % 2 / 2;
				g.x = yb(k || this.x || 0) + e;
				g.y = yb(a || this.y || 0) + e;
				g.width = yb((u || this.width || 0) - 2 * e);
				g.height = yb((d || this.height || 0) - 2 * e);
				g.strokeWidth = b;
				if (g.width === 0 && u !== 0)
					g.width = 1;
				for (c in g)
					this[c] !== g[c] && (this[c] = j[c] = g[c]);
				return j
			},
			css : function(b) {
				var k = this.element, k = b && b.width && k.nodeName === "text", a, u = "", c = function(
						b, k) {
					return "-" + k.toLowerCase()
				};
				if (b && b.color)
					b.fill = b.color;
				this.styles = b = h(this.styles, b);
				if (d && !g)
					k && delete b.width, A(this.element, b);
				else {
					for (a in b)
						u += a.replace(/([A-Z])/g, c) + ":" + b[a] + ";";
					this.attr({
								style : u
							})
				}
				k && this.added && this.renderer.buildText(this);
				return this
			},
			on : function(b, k) {
				var a = k;
				da && b === "click" && (b = "touchstart", a = function(b) {
					b.preventDefault();
					k()
				});
				this.element["on" + b] = a;
				return this
			},
			translate : function(b, k) {
				return this.attr({
							translateX : b,
							translateY : k
						})
			},
			invert : function() {
				this.inverted = !0;
				this.updateTransform();
				return this
			},
			updateTransform : function() {
				var b = this.translateX || 0, k = this.translateY || 0, a = this.inverted, u = this.rotation, d = [], c = this.shadows;
				a && (b += this.attr("width"), k += this.attr("height"));
				(b || k) && d.push("translate(" + b + "," + k + ")");
				a ? d.push("rotate(90) scale(-1,1)") : u
						&& d.push("rotate(" + u + " " + this.x + " " + this.y
								+ ")");
				if (d.length
						&& (b = d.join(" "), f(this.element, "transform", b), c)) {
					k = 0;
					for (a = c.length; k < a; k += 1)
						f(c[k], "transform", b)
				}
			},
			rotate : function(b, k, a) {
				this.x = k;
				this.y = a;
				return this.attr({
							translateX : k,
							translateY : a,
							rotation : b
						})
			},
			toFront : function() {
				var b = this.element;
				b.parentNode.appendChild(b);
				return this
			},
			align : function(b, k, a) {
				b
						? (this.alignOptions = b, this.alignByTranslate = k, a
								|| this.renderer.alignedObjects.push(this))
						: (b = this.alignOptions, k = this.alignByTranslate);
				var a = o(a, this.renderer), u = b.align, d = b.verticalAlign, c = (a.x || 0)
						+ (b.x || 0), j = (a.y || 0) + (b.y || 0), g = {};
				/^(right|center)$/.test(u)
						&& (c += (a.width - (b.width || 0)) / {
							right : 1,
							center : 2
						}[u]);
				g[k ? "translateX" : "x"] = R(c);
				/^(bottom|middle)$/.test(d)
						&& (j += (a.height - (b.height || 0)) / ({
							bottom : 1,
							middle : 2
						}[d] || 1));
				g[k ? "translateY" : "y"] = R(j);
				this[this.placed ? "animate" : "attr"](g);
				this.placed = !0;
				this.alignAttr = g;
				return this
			},
			getBBox : function() {
				var b, k, a, u = this.rotation, d = u * Cb;
				try {
					b = h({}, this.element.getBBox())
				} catch (c) {
					b = {
						width : 0,
						height : 0
					}
				}
				k = b.width;
				a = b.height;
				if (u)
					b.width = Da(a * P(d)) + Da(k * Ea(d)), b.height = Da(a
							* Ea(d))
							+ Da(k * P(d));
				return b
			},
			show : function() {
				return this.attr({
							visibility : gb
						})
			},
			hide : function() {
				return this.attr({
							visibility : V
						})
			},
			add : function(b) {
				var k = this.renderer, d = b || k, u = d.element || k.box, c = u.childNodes, j = this.element, g = f(
						j, "zIndex");
				this.parentInverted = b && b.inverted;
				this.textStr !== void 0 && k.buildText(this);
				if (b && this.htmlNode) {
					if (!b.htmlNode)
						b.htmlNode = [];
					b.htmlNode.push(this)
				}
				if (g)
					d.handleZ = !0, g = K(g);
				if (d.handleZ)
					for (d = 0; d < c.length; d++)
						if (b = c[d], k = f(b, "zIndex"), b !== j
								&& (K(k) > g || !a(g) && a(k)))
							return u.insertBefore(j, b), this;
				u.appendChild(j);
				this.added = !0;
				return this
			},
			safeRemoveChild : function(b) {
				var k = b.parentNode;
				k && k.removeChild(b)
			},
			destroy : function() {
				var b = this, k = b.element || {}, a = b.shadows, d, c;
				k.onclick = k.onmouseout = k.onmouseover = k.onmousemove = null;
				wc(b);
				if (b.clipPath)
					b.clipPath = b.clipPath.destroy();
				if (b.stops) {
					for (c = 0; c < b.stops.length; c++)
						b.stops[c] = b.stops[c].destroy();
					b.stops = null
				}
				b.safeRemoveChild(k);
				a && M(a, function(k) {
							b.safeRemoveChild(k)
						});
				b.renderer.alignedObjects && B(b.renderer.alignedObjects, b);
				for (d in b)
					delete b[d];
				return null
			},
			empty : function() {
				for (var b = this.element, k = b.childNodes, a = k.length; a--;)
					b.removeChild(k[a])
			},
			shadow : function(b, k, a) {
				a || (a = {});
				var d = [], c, j = this.element, g = a.color || "rgb(0,0,0)", e = "translate"
						+ (!this.parentInverted != !a.inverted
								? "(-1,-1)"
								: "(1,1)"), p = K(this.attr("stroke-width")
								|| 1, 10)
						+ 6, a = E(a.opacity, 1) * 0.06;
				if (b) {
					for (b = 1; b <= 3; b++)
						c = j.cloneNode(0), f(c, {
									isShadow : "true",
									stroke : g,
									"stroke-opacity" : a * b,
									"stroke-width" : p - 2 * b,
									transform : e,
									fill : T
								}), k ? k.element.appendChild(c) : j.parentNode
								.insertBefore(c, j), d.push(c);
					this.shadows = d
				}
				return this
			},
			textBound : function() {
				var b = this.renderer, k = this.textBoundWrapper, a = this.styles, d, c, j, g;
				if (this.element.nodeName !== "text" || !a
						|| !a.backgroundColor && !a.borderColor
						|| !this.textStr || (this.rotation || 0) % 90 !== 0)
					return this.textBoundWrapper
							&& this.textBoundWrapper.destroy(), this;
				d = this.getBBox();
				j = d.width + 4;
				g = d.height + 4;
				c = d.x;
				d = d.y;
				this.rotation === 270
						&& (c = this.attr("x") - j / 2 - 2, d = this.attr("y")
								- g + 4);
				if (!k)
					k = this.textBoundWrapper = b.rect(0, 0, 0, 0, 0, 1), this.element.parentNode
							.insertBefore(k.element, this.element);
				k.attr({
							fill : a.backgroundColor || T,
							stroke : a.borderColor || N,
							"fill-opacity" : E(a.backgroundOpacity, 1),
							"stroke-opacity" : E(a.borderOpacity, 1)
						});
				k.attr(k.crisp(1, c - 1.5, d - 1.5, j, g));
				return this
			}
		};
		var yc = function() {
			this.init.apply(this, arguments)
		};
		yc.prototype = {
			Element : La,
			type : "SVG",
			init : function(b, k, a, u) {
				var c = location, j;
				j = this.createElement("svg").attr({
							xmlns : "http://www.w3.org/2000/svg",
							version : "1.1"
						});
				b.appendChild(j.element);
				this.box = j.element;
				this.boxWrapper = j;
				this.alignedObjects = [];
				this.url = d ? "" : c.href.replace(/#.*?$/, "").replace(
						/[\'\\]/g, lb.opera ? function(b) {
							return escape(b)
						} : function(b) {
							return "\\" + b
						});
				this.defs = this.createElement("defs").add();
				this.forExport = u;
				this.gradients = [];
				this.setSize(k, a, !1)
			},
			destroy : function() {
				var b, k = this.gradients, a = this.defs;
				b = this.pending;
				this.box = null;
				this.boxWrapper = this.boxWrapper.destroy();
				if (b && b.length)
					for (; b.shift(););
				if (k) {
					for (b = 0; b < k.length; b++)
						this.gradients[b] = k[b].destroy();
					this.gradients = null
				}
				if (a)
					this.defs = a.destroy();
				return this.alignedObjects = null
			},
			createElement : function(b) {
				var k = new this.Element;
				k.init(this, b);
				return k
			},
			buildText : function(b) {
				for (var k = b.element, a = o(b.textStr, "").toString()
						.replace(/<(b|strong)>/g,
								'<span style="font-weight:bold">')
						.replace(/<(i|em)>/g,
								'<span style="font-style:italic">').replace(
								/<a/g, "<span").replace(
								/<\/(b|strong|i|em|a)>/g, "</span>")
						.split(/<br.*?>/g), d = k.childNodes, c = /style="([^"]+)"/, j = /href="([^"]+)"/, e = f(
						k, "x"), p = b._dx, w = b.styles, s = w && b.useHTML
						&& !this.forExport, n = b.htmlNode, v = w && K(w.width), l = w
						&& w.lineHeight, r, X = d.length; X--;)
					k.removeChild(d[X]);
				v && !b.added && this.box.appendChild(k);
				X = /title="([^"]+)"/;
				X.test(a[0]) && f(k, "title", a[0].match(X)[1]);
				M(a, function(a, d) {
					var u, x = 0, h, a = a.replace(/<span/g, "|||<span")
							.replace(/<\/span>/g, "</span>|||");
					u = a.split("|||");
					M(u, function(a) {
						if (a !== "" || u.length === 1) {
							var w = {}, s = Qa.createElementNS(
									"http://www.w3.org/2000/svg", "tspan");
							c.test(a)
									&& f(s, "style", a.match(c)[1].replace(
													/(;| |^)color([ :])/,
													"$1fill$2"));
							j.test(a)
									&& (f(s, "onclick", 'location.href="'
													+ a.match(j)[1] + '"'), A(
											s, {
												cursor : "pointer"
											}));
							var a = (a.replace(/<(.|\n)*?>/g, "") || " ")
									.replace(/&lt;/g, "<")
									.replace(/&gt;/g, ">"), n = Qa
									.createTextNode(a);
							s.appendChild(n);
							x ? w.dx = p : w.x = e;
							if (!x) {
								if (d) {
									!g && b.renderer.forExport && A(s, {
												display : "block"
											});
									h = lb.getComputedStyle
											&& K(lb
													.getComputedStyle(r, null)
													.getPropertyValue("line-height"));
									if (!h || isNaN(h))
										h = l || r.offsetHeight || 18;
									f(s, "dy", h)
								}
								r = s
							}
							f(s, w);
							k.appendChild(s);
							x++;
							if (v)
								for (var a = a.replace(/-/g, "- ").split(" "), va = []; a.length
										|| va.length;)
									n = k.getBBox().width, w = n > v, !w
											|| a.length === 1
											? (a = va, va = [], a.length
													&& (s = Qa
															.createElementNS(
																	"http://www.w3.org/2000/svg",
																	"tspan"), f(
															s, {
																dy : l || 16,
																x : e
															}), k
															.appendChild(s), n > v
															&& (v = n)))
											: (s.removeChild(s.firstChild), va
													.unshift(a.pop())), a.length
											&& s
													.appendChild(Qa
															.createTextNode(a
																	.join(" ")
																	.replace(
																			/- /g,
																			"-")))
						}
					})
				});
				if (s) {
					if (!n)
						n = b.htmlNode = J("span", null, h(w, {
											position : ba,
											top : 0,
											left : 0
										}), this.box.parentNode);
					n.innerHTML = b.textStr;
					for (X = d.length; X--;)
						d[X].style.visibility = V
				}
			},
			crispLine : function(b, a) {
				b[1] === b[4] && (b[1] = b[4] = R(b[1]) + a % 2 / 2);
				b[2] === b[5] && (b[2] = b[5] = R(b[2]) + a % 2 / 2);
				return b
			},
			path : function(b) {
				return this.createElement("path").attr({
							d : b,
							fill : T
						})
			},
			circle : function(b, a, d) {
				b = t(b) ? b : {
					x : b,
					y : a,
					r : d
				};
				return this.createElement("circle").attr(b)
			},
			arc : function(b, a, d, u, c, j) {
				if (t(b))
					a = b.y, d = b.r, u = b.innerR, c = b.start, j = b.end, b = b.x;
				return this.symbol("arc", b || 0, a || 0, d || 0, {
							innerR : u || 0,
							start : c || 0,
							end : j || 0
						})
			},
			rect : function(b, a, d, u, c, j) {
				if (t(b))
					a = b.y, d = b.width, u = b.height, c = b.r, j = b.strokeWidth, b = b.x;
				c = this.createElement("rect").attr({
							rx : c,
							ry : c,
							fill : T
						});
				return c.attr(c.crisp(j, b, a, ca(d, 0), ca(u, 0)))
			},
			rect3d : function() {
				var b = {
					x : {
						drawTop : !0,
						drawRight : !0,
						drawFront : !0,
						drawShadow : !0
					},
					y : {
						drawTop : !0,
						drawRight : !0,
						drawFront : !0,
						drawShadow : !0
					},
					width : {
						drawTop : !0,
						drawRight : !0,
						drawFront : !0,
						drawShadow : !0
					},
					height : {
						drawRight : !0,
						drawFront : !0,
						drawShadow : !0
					},
					strokeWidth : !0,
					"stroke-width" : !0,
					stroke : !0,
					x3D : {
						drawTop : !0,
						drawRight : !0,
						drawShadow : !0
					},
					y3D : {
						drawTop : !0,
						drawRight : !0,
						drawShadow : !0
					},
					fill : !0
				}, k = function(k, d) {
					var x, c, j, g = this, e, p, f = this._3dAttr;
					z(k) && a(d) && (x = k, k = {}, k[x] = d);
					if (z(k))
						g = b[k] ? this._3dAttr[k] : this._attr(k);
					else
						for (x in k)
							if (c = k[x], b[x]) {
								j = b[x];
								f[x] = c;
								if (x === "stroke" || x === "stroke-width"
										|| x === "strokeWidth")
									this.frontRect.attr(x, c), this.topRect
											.attr(x, c), this.rightRect.attr(x,
											c);
								if (x === "fill")
									c && c.linearGradient && c.stops
											&& c.stops[0]
											&& (c = c.stops[0][1]), rb.test(c)
											? (p = ob(c), e = p.get("hex"), p = p
													.get("a")
													* 100)
											: c && c.FCcolor
													? (e = c.FCcolor.color
															.split(cb)[0], p = c.FCcolor.alpha
															.split(cb)[0])
													: Ab.test(c)
															&& (e = c.replace(
																	Wa, ub), p = 100), f.color = e, f.alpha = p, f.lighting3D === !1
											? (f.frontColor = hb(f.color,
													f.alpha), f.rightColor = hb(
													fa(f.color, 60), f.alpha), f.topColor = hb(
													fa(f.color, 75), f.alpha))
											: (f.frontColor = {
												FCcolor : {
													color : fa(f.color, 65)
															+ cb
															+ Va(f.color, 55),
													alpha : p + cb + p,
													angle : 270
												}
											}, f.rightColor = {
												FCcolor : {
													color : fa(f.color, 35)
															+ cb
															+ fa(f.color, 75),
													alpha : p + cb + p,
													angle : ab(f.x3D, f.height
																	+ f.y3D, 3)
												}
											}, f.topColor = {
												FCcolor : {
													color : fa(f.color, 85)
															+ cb
															+ Va(f.color, 35),
													alpha : p + cb + p,
													angle : ab(f.width + f.x3D,
															f.y3D, 4)
												}
											}), this.topRect.attr({
												fill : f.topColor
											}), this.rightRect.attr({
												fill : f.rightColor
											}), this.frontRect.attr({
												fill : f.frontColor
											});
								if (j.drawTop) {
									if (f.lighting3D !== !1
											&& f.topColor.FCcolor)
										f.topColor.FCcolor.angle = ab(f.width
														+ f.x3D, f.y3D, 4);
									this.topRect.attr({
												d : ["M", f.x, f.y, "L",
														f.x + f.width, f.y,
														f.x + f.width + f.x3D,
														f.y - f.y3D,
														f.x + f.x3D,
														f.y - f.y3D, "Z"],
												fill : f.topColor
											})
								}
								if (j.drawRight) {
									if (f.lighting3D !== !1
											&& f.rightColor.FCcolor)
										f.rightColor.FCcolor.angle = ab(f.x3D,
												f.height + f.y3D, 3);
									this.rightRect.attr({
												d : ["M", f.x + f.width, f.y,
														"L",
														f.x + f.width + f.x3D,
														f.y - f.y3D,
														f.x + f.width + f.x3D,
														f.y - f.y3D + f.height,
														f.x + f.width,
														f.y + f.height, "Z"],
												fill : f.rightRect
											})
								}
								j.drawFront && this.frontRect.attr(x, c);
								j.drawShadow && this.shadowElement.attr({
											d : ["M", f.x + f.x3D, f.y - f.y3D,
													"L", f.x + f.x3D + f.width,
													f.y - f.y3D,
													f.x + f.x3D + f.width,
													f.y - f.y3D + f.height]
										})
							} else
								this._attr(x, c);
					return g
				}, d = function() {
					var b = this.shadowElement;
					d && b.shadow.apply(b, arguments)
				};
				return function(b, a, c, j, g, e, f, p) {
					if (t(b))
						a = b.y, c = b.width, j = b.height, f = b.strokeWidth, g = b.x3D, e = b.y3D, b = b.x;
					var g = O(g, 10), e = O(e, 10), h = {
						x : b,
						y : a,
						width : c,
						height : j,
						r : 0
					}, w = ["M", b, a, "L", b + c, a, b + c + g, a - e, b + g,
							a - e, "Z"], s = ["M", b + c, a, "L", b + c + g,
							a - e, b + c + g, a - e + j, b + c, a + j, "Z"], n = [
							"M", b + g, a - e, "L", b + g + c, a - e,
							b + g + c, a - e + j], p = this.g(p);
					p.shadowElement = this.path(n).add(p);
					p.frontRect = this.rect(h).attr({
								"stroke-width" : f
							}).add(p);
					p.topRect = this.path(w).attr({
								"stroke-width" : f
							}).add(p);
					p.rightRect = this.path(s).attr({
								"stroke-width" : f
							}).add(p);
					p._attr = p.attr;
					p.attr = k;
					p.shadow = d;
					p._3dAttr = {
						y : a,
						width : c,
						height : j,
						x : b,
						strokeWidth : f,
						x3D : g,
						y3D : e,
						lighting3D : this.lighting3D
					};
					return p
				}
			}(),
			getArcPath : function(b, a, d, c, j, g, e, f, p, h) {
				return ["A", e, f, 0, h, p, j, g]
			},
			scroller : function() {
				var b = da ? "touchstart" : "mousedown", k = {
					pageX : 0,
					pageY : 0
				}, c = function(b) {
					var a = b.type === "dragend", d = b.data, c = da && ac(b)
							|| k;
					d.dragActive = !a;
					if (a) {
						if (d.onChange)
							d.onChange(d.scrollPosition, !1, !0);
						if (d.onEnd)
							d.onEnd(d.scrollPosition, !1, !0)
					} else
						d.dragInitPos = d.scrollPosition, d.dragStartX = b.pageX
								|| c.pageX, d.dragStartY = b.pageY || c.pageY;
					da
							&& d.anchor.attr("height", d.anchor.attr("height")
											* (a ? 0.625 : 1.6))
				}, u = function(b) {
					var a = b.data, d = a.horiz, c = da && ac(b) || k;
					a.group.setScrollPosition(a.dragInitPos
							+ (d
									? (b.pageX || c.pageX) - a.dragStartX
									: (b.pageY || c.pageY) - a.dragStartY)
							/ a.zoneLength)
				}, j = function(b, a) {
					if (!arguments.length)
						return this;
					h(this.config, {
								onChange : b,
								onEnd : a
							});
					return this
				}, e = function(b, a) {
					var k = this.config, d = k.trackLength * b;
					d < 5 && (b = 5 / k.trackLength, d = k.trackLength * b);
					k.zoneLength = k.trackLength - k.trackLength
							* (k.scrollRatio = b);
					this.elements.anchor.attr({
								width : d
							});
					k.scrollDelta = b >= 1 ? 1 : 0.1;
					return this.setScrollPosition(void 0, void 0, a)
				}, f = function(b, k, c) {
					var x = this.config, u = x.horiz, j = x.anchor, e = d && !g
							&& !u;
					a(b)
							? (b <= 0 ? b = 1.0E-8 : b > 1 && (b = 1), x.scrollPosition = b)
							: b = x.scrollPosition;
					u = (u ? b : 1 - b) * x.zoneLength;
					u === 0 && (u = 1.0E-8);
					e ? j.translate(void 0, -u) : j.translate(u);
					if (!c && x.onChange)
						x.onChange(b, k, !0);
					return this
				}, p = function(b) {
					var a = this.renderer, k = this.config, c, x, u;
					if (t(b) && "fill" in b) {
						c = b.fill;
						x = k.flat;
						u = !k.horiz && d && !g ? 180 : 90;
						var j = {
							base : c,
							light : ub + Va(c, 15),
							dark : ub + fa(c, x ? 50 : 30)
						};
						j.darkFill = x ? j.dark : {
							FCcolor : {
								color : j.dark + cb + c,
								alpha : "100",
								angle : u
							}
						};
						j.lightFill = x ? j.base : {
							FCcolor : {
								color : c + cb + j.light,
								alpha : "100",
								angle : u
							}
						};
						c = j;
						x = {
							fill : c.dark
						};
						u = {
							fill : c.lightFill
						};
						k.buttons
								&& (this.elements.start.attr(u), this.elements.end
										.attr(u), this.elements.startArrow
										.attr(x), this.elements.endArrow
										.attr(x));
						this.elements.track.attr(u);
						this.elements.anchor.attr({
									fill : c.darkFill,
									stroke : c.dark,
									"stroke-width" : 0.2
								});
						delete b.fill
					}
					return a.Element.prototype.attr.apply(this, arguments)
				};
				return function(a, k, d, g, w, s, n, v) {
					w || (d += g, g = d - g, d -= g);
					var l = this.g("scroller").attr({
								translateX : a,
								translateY : k,
								width : d,
								height : g
							}), a = l.config = {}, r = l.elements = {}, X, k = !s
							? 0
							: s.size || g, q = k * 0.25, m = g * 0.25, t = k
							+ (s && s.padding || 0), o = d - 2 * t, da = o < 3;
					r.track = this.rect(t, 0, o, g, 0);
					r.anchor = this.rect(t, n ? 0 : m * 0.5, da ? 3 : o, n
									? g
									: g - m, n ? 0 : pb(q, m));
					if (s)
						r.start = this.rect(0, 0, k, g, 0), r.startArrow = this
								.path([Aa, q, 0, ra, 0, m, q, m * 2, q, 0])
								.translate(k * 0.4, m), r.end = this.rect(
								d - k, 0, k, g, 0), r.endArrow = this.path([Aa,
								0, 0, ra, q, m, 0, m * 2, 0, 0]).translate(
								d - k * 0.6, m);
					w || l.attr({
								width : g,
								height : d
							}).invert();
					for (X in r)
						r[X].add(l);
					h(a, {
								group : l,
								anchor : r.anchor,
								width : d,
								horiz : w,
								flat : n,
								buttons : !!s,
								scrollRatio : 1,
								trackOffset : t,
								trackLength : o,
								zoneLength : o,
								scrollPosition : 0,
								scrollDelta : 0.1
							});
					h(l, {
								destroy : function() {
									M(r, function(b) {
												b.destroy()
											})
								},
								attr : p,
								setScrollRatio : e,
								setScrollPosition : f,
								callback : j
							});
					za(r.anchor.element, "dragstart dragend", c, a);
					za(r.anchor.element, "drag", u, a);
					s
							&& (za(	[l.elements.start.element,
											l.elements.startArrow.element], b,
									function() {
										l
												.setScrollPosition(l.config.scrollPosition
														- l.config.scrollDelta)
									}, a), za([l.elements.end.element,
											l.elements.endArrow.element], b,
									function() {
										l
												.setScrollPosition(l.config.scrollPosition
														+ l.config.scrollDelta)
									}, a));
					v && za(v.element, "wheelchange", function(b, a) {
								l.setScrollPosition(l.config.scrollPosition - a
										* 0.5);
								b.preventDefault()
							});
					return l
				}
			}(),
			setSize : function(b, a, d) {
				var c = this.alignedObjects, j = c.length;
				this.width = b;
				this.height = a;
				for (this.boxWrapper[o(d, !0) ? "animate" : "attr"]({
							width : b,
							height : a
						}); j--;)
					c[j].align()
			},
			g : function(b) {
				return this.createElement("g").attr(a(b) && {
					"class" : Fb + b
				})
			},
			image : function(b, a, d, c, j) {
				var g = {
					preserveAspectRatio : T
				};
				arguments.length > 1 && h(g, {
							x : a,
							y : d,
							width : c,
							height : j
						});
				g = this.createElement("image").attr(g);
				g.element.setAttributeNS ? g.element.setAttributeNS(
						"http://www.w3.org/1999/xlink", "href", b) : g.element
						.setAttribute("hc-svg-href", b);
				return g
			},
			symbol : function(b, a, d, c, j) {
				if (t(b))
					a = b.x, d = b.y, c = b.radius, j = b.options, b = b.symbol;
				var g;
				if (/^(poly|spoke)\_\d+$/.test(b))
					b = b.split("_"), g = O(parseInt(b[1], 10), 3), b = E(b[0],
							"poly"), typeof j !== "object" && (j = {}), j.innerR = g;
				var e;
				g = (g = this.symbols[b]) && g(R(a), R(d), c, j, this);
				var f = /^url\((.*?)\)$/, p;
				if (g)
					e = this.path(g), h(e, {
								symbolName : b,
								x : a,
								y : d,
								r : c
							}), j && h(e, j);
				else if (f.test(b)) {
					var w = function(b, a) {
						b.attr({
									width : a[0],
									height : a[1]
								}).translate(-R(a[0] / 2), -R(a[1] / 2))
					};
					p = b.match(f)[1];
					c = n[p];
					e = this.image(p).attr({
								x : a,
								y : d
							});
					c ? w(e, c) : (e.attr({
								width : 0,
								height : 0
							}), J("img", {
								onload : function() {
									w(e, n[p] = [this.width, this.height])
								},
								src : p
							}))
				} else
					e = this.circle(a, d, c);
				return e
			},
			symbols : {
				poly : function(b, a, d, c) {
					var j = c.innerR, g = 2 * ga.PI / j, e, f = typeof c.startAngle !== "undefined"
							? c.startAngle
							: ga.PI / 2;
					if (j > 2) {
						c = [Aa, b + d * Ea(-f), a + d * P(-f), ra];
						for (e = 1; e < j; e++)
							c.push(b + d * Ea(-(f + e * g)), a + d
											* P(-(f + e * g)));
						c.push("Z")
					} else
						c = [Aa, b, a, "Z"];
					return c
				},
				spoke : function(b, a, d, c) {
					var j = c.innerR, g = 2 * ga.PI / j, c = typeof c.startAngle !== "undefined"
							? c.startAngle
							: ga.PI / 2, e, f;
					if (j > 2) {
						e = [Aa, b, a, ra, b + d * Ea(-c), a + d * P(-c)];
						for (f = 1; f < j; f++)
							e.push(Aa, b, a, ra, b + d * Ea(-(c + f * g)), a
											+ d * P(-(c + f * g)))
					} else
						e = [Aa, b, a, "Z"];
					return e
				},
				square : function(b, a, d) {
					d *= 0.707;
					return [Aa, b - d, a - d, ra, b + d, a - d, b + d, a + d,
							b - d, a + d, "Z"]
				},
				triangle : function(b, a, d) {
					return [Aa, b, a - 1.33 * d, ra, b + d, a + 0.67 * d,
							b - d, a + 0.67 * d, "Z"]
				},
				"triangle-down" : function(b, a, d) {
					return [Aa, b, a + 1.33 * d, ra, b - d, a - 0.67 * d,
							b + d, a - 0.67 * d, "Z"]
				},
				diamond : function(b, a, d) {
					return [Aa, b, a - d, ra, b + d, a, b, a + d, b - d, a, "Z"]
				},
				arc : function(b, a, d, c) {
					var j = c.start, g = c.end - 1.0E-6, e = c.innerR, f = Ea(j), p = P(j), h = Ea(g), g = P(g), c = c.end
							- j < qb ? 0 : 1;
					return [Aa, b + d * f, a + d * p, "A", d, d, 0, c, 1,
							b + d * h, a + d * g, ra, b + e * h, a + e * g,
							"A", e, e, 0, c, 0, b + e * f, a + e * p, "Z"]
				}
			},
			clipPath : function(b) {
				var a = Fb + v++, d = this.createElement("clipPath").attr({
							id : a
						}).add(this.defs), b = this.createElement("path").attr(
						{
							d : b,
							fill : T
						}).add(d);
				b.id = a;
				b.clipPath = d;
				return b
			},
			clipRect : function(b, a, d, c) {
				var j = Fb + v++, g = this.createElement("clipPath").attr({
							id : j
						}).add(this.defs), b = this.rect(b, a, d, c, 0).add(g);
				b.id = j;
				b.clipPath = g;
				return b
			},
			color : function(b, a, c) {
				var j, g = /^rgba/;
				if (b && b.linearGradient) {
					var e = this, c = "linearGradient", p = b[c], a = Fb + v++, h, w, s;
					h = e.createElement(c).attr({
								id : a,
								gradientUnits : "userSpaceOnUse",
								x1 : p[0],
								y1 : p[1],
								x2 : p[2],
								y2 : p[3]
							}).add(e.defs);
					e.gradients.push(h);
					h.stops = [];
					M(b.stops, function(b) {
								g.test(b[1])
										? (j = ob(b[1]), w = j.get("rgb"), s = j
												.get("a"))
										: (w = b[1], s = 1);
								b = e.createElement("stop").attr({
											offset : b[0],
											"stop-color" : w,
											"stop-opacity" : s
										}).add(h);
								h.stops.push(b)
							});
					return "url('" + this.url + "#" + a + "')"
				} else if (b && b.FCcolor) {
					var n = b.FCcolor.element, e = this;
					if (n && n.parentNode && !e.forExport)
						return b.FCcolor.url;
					var n = E(b.FCcolor.color, "000000"), l = E(
							b.FCcolor.alpha, "100")
							+ "", r, X, q, m = 0, o = 100, t = E(
							b.FCcolor.ratio, "0");
					r = O(b.FCcolor.angle, "0");
					n = n.replace(/\s+/ig, "").replace(/\,+$/ig, "").split(",");
					l = l.replace(/\s+/ig, "").replace(/\,+$/ig, "").split(",");
					t = t.replace(/\s+/ig, "").replace(/\,+$/ig, "").split(",");
					r %= 360;
					r < 0 && (r = 360 + r);
					if (b.FCcolor.radialGradient) {
						a = Fb + v++;
						h = e.createElement("radialGradient").attr({
							id : a,
							gradientUnits : E(b.FCcolor.gradientUnits,
									"userSpaceOnUse"),
							cx : b.FCcolor.cx,
							cy : b.FCcolor.cy,
							r : b.FCcolor.r
						}).add(e.defs);
						e.gradients.push(h);
						h.stops = [];
						for (r = 0; r < n.length && m < 100; r += 1)
							X = n[r].replace(/^#?/, "#"), o = q = O(l[r], o), c = O(
									t[r], r !== 0
											? (100 - m) / (n.length - r)
											: 0), m += c, m > 100 && (m = 100), h.stops
									.push(e.createElement("stop").attr({
												offset : m + "%",
												"stop-color" : X,
												"stop-opacity" : q / 100
											}).add(h));
						d && n.length === 1
								&& h.stops.push(e.createElement("stop").attr({
											offset : m + "%",
											"stop-color" : X,
											"stop-opacity" : q / 100
										}).add(h));
						b.FCcolor.element = h.element;
						b.FCcolor.url = "url('" + this.url + "#" + a + "')";
						return b.FCcolor.url
					} else if (n.length === 1)
						return f(a, c + "-opacity", O(l[0], 100) / 100), n[0]
								.replace(/^#?/, "#");
					else {
						var da, C, sa, xa, m = 0, c = "linearGradient", p = b[c], a = Fb
								+ v++;
						da = Math.tan(r * Math.PI / 180);
						p = Math.round(50 - 50 * da);
						da = Math.round(50 - 50 / da);
						da = da < 0 ? 0 : da;
						da = da > 100 ? 100 : da;
						p = p < 0 ? 0 : p;
						p = p > 100 ? 100 : p;
						C = 100 - da;
						sa = 100 - p;
						r > 90 && r <= 270 && (xa = p, p = sa, sa = xa);
						r > 180 && r <= 360 && (xa = da, da = C, C = xa);
						h = e.createElement(c).attr({
							id : a,
							gradientUnits : E(b.FCcolor.gradientUnits,
									"objectBoundingBox"),
							x1 : E(b.FCcolor.x1, da + "%"),
							y1 : E(b.FCcolor.y1, p + "%"),
							x2 : E(b.FCcolor.x2, C + "%"),
							y2 : E(b.FCcolor.y2, sa + "%")
						}).add(e.defs);
						e.gradients.push(h);
						h.stops = [];
						for (r = 0; r < n.length && m < 100; r += 1)
							X = n[r].replace(/^#?/, "#"), o = q = O(l[r], o), c = O(
									t[r], r !== 0
											? (100 - m) / (n.length - r)
											: 0), m += c, m > 100 && (m = 100), h.stops
									.push(e.createElement("stop").attr({
												offset : m + "%",
												"stop-color" : X,
												"stop-opacity" : q / 100
											}).add(h));
						d && n.length === 1
								&& h.stops.push(e.createElement("stop").attr({
											offset : m + "%",
											"stop-color" : X,
											"stop-opacity" : q / 100
										}).add(h));
						b.FCcolor.element = h.element;
						b.FCcolor.url = "url('" + this.url + "#" + a + "')";
						return b.FCcolor.url
					}
				} else
					return g.test(b) ? (j = ob(b), f(a, c + "-opacity", j
									.get("a")), j.get("rgb")) : (a
							.removeAttribute(c + "-opacity"), b)
			},
			text : function(b, a, d, c, j) {
				var g = r.chart.style, a = R(o(a, 0)), d = R(o(d, 0)), b = this
						.createElement("text").attr({
									x : a,
									y : d,
									text : b
								}).css({
									fontFamily : g.fontFamily,
									fontSize : g.fontSize
								});
				b.x = a;
				b.y = d;
				b.useHTML = c;
				b._dx = o(j, 3);
				return b
			}
		};
		s = yc;
		if (!g)
			aa = q(La, {
				init : function(b, a) {
					var d = ["<", a, ' filled="f" stroked="f"'], c = [
							"position: ", ba, ";"];
					(a === "shape" || a === Ja)
							&& c.push("left:0;top:0;width:10px;height:10px;");
					j && c.push("visibility: ", a === Ja ? V : gb);
					d.push(' style="', c.join(""), '"/>');
					if (a)
						d = a === Ja || a === "span" || a === "img" ? d
								.join("") : b.prepVML(d), this.element = J(d);
					this.renderer = b
				},
				add : function(b) {
					var a = this.renderer, d = this.element, c = a.box, c = b
							? b.element || b
							: c;
					b && b.inverted && a.invertChild(d, c);
					j && c.gVis === V && A(d, {
								visibility : V
							});
					c.appendChild(d);
					this.added = !0;
					this.alignOnAdd && this.updateTransform();
					return this
				},
				attr : function(b, k) {
					var d, c, g, e, p, h = this.element || {}, w = h.style, s = h.nodeName, n = this.renderer, l = this.symbolName, r, v, X = this.shadows, m = this;
					z(b) && a(k) && (d = b, b = {}, b[d] = k);
					if (z(b))
						d = b, m = d === "strokeWidth" || d === "stroke-width"
								? this.strokeweight
								: this[d];
					else
						for (d in b) {
							c = b[d];
							r = !1;
							if (l
									&& /^(x|y|r|start|end|width|height|innerR)/
											.test(d))
								v || (this.symbolAttr(b), v = !0), r = !0;
							else if (d === "d") {
								c = c || [];
								this.d = c.join(" ");
								g = c.length;
								for (r = []; g--;)
									r[g] = Ta(c[g])
											? R(c[g] * 10) - 5
											: c[g] === "Z" ? "x" : c[g];
								c = r.join(" ") || "x";
								h.path = c;
								if (X)
									for (g = X.length; g--;)
										X[g].path = c;
								r = !0
							} else if (d === "zIndex" || d === "visibility") {
								if (j && d === "visibility")
									if (h.gVis = c, s === "DIV") {
										r = h.childNodes;
										for (g = r.length; g--;)
											r[g].gVis !== V && A(r[g], {
														visibility : c
													});
										c === gb && (c = null)
									} else
										h.parentNode && h.parentNode.gVis === V
												&& (c = null);
								if (c || c === gb)
									w[d] = c;
								r = !0
							} else if (/^(width|height)$/.test(d))
								this[d] = c, this.updateClipping
										? (this[d] = c, this.updateClipping())
										: w[d] = c, r = !0;
							else if (/^(x|y)$/.test(d))
								this[d] = c, this.updateClipping
										? (this[{
											x : "left",
											y : "top"
										}[d]] = c, this.updateClipping())
										: h.tagName === "SPAN" ? this
												.updateTransform() : w[{
											x : "left",
											y : "top"
										}[d]] = c, r = !0;
							else if (d === "class")
								h.className = c;
							else if (d === "stroke")
								c = n.color(c, h, d), d = "strokecolor";
							else if (d === "stroke-width"
									|| d === "strokeWidth")
								h.stroked = c ? !0 : !1, d = "strokeweight", this[d] = c, Ta(c)
										&& (c += S);
							else if (d === "stroke-linecap"
									|| d === "strokeLinecap")
								this[d] = c, d = "endcap", c = c === "butt"
										? "flat"
										: c || "flat", e = h
										.getElementsByTagName("stroke")[0]
										|| J(n.prepVML(["<stroke/>"]), null,
												null, h), e[d] = c, r = !0;
							else if (d === "dashstyle")
								e = h.getElementsByTagName("stroke")[0]
										|| J(n.prepVML(["<stroke/>"]), null,
												null, h), e[d] = c || "solid", this.dashstyle = c, r = !0;
							else if (d === "fill")
								s === "SPAN"
										? w.color = c
										: (h.filled = c !== T ? !0 : !1, c = n
												.color(c, h, d), d = "fillcolor");
							else if (d === "translateX" || d === "translateY"
									|| d === "rotation" || d === "align")
								d === "align" && (d = "textAlign"), this[d] = c, this
										.updateTransform(), r = !0;
							else if (d === "text")
								this.bBox = null, h.innerHTML = c, r = !0;
							if (X)
								if (d === "visibility")
									for (g = X.length; g--;)
										X[g].style[d] = c;
								else if (d === "opacity"
										|| d === "stroke-opacity") {
									p = 6 * c;
									g = 0;
									for (e = X.length; g < e;)
										f(X[g], d, (g += 1) * p)
								} else if (d === "dashstyle")
									for (g = X.length; g--;)
										e = X[g].getElementsByTagName("stroke")[0]
												|| J(n.prepVML(["<stroke/>"]),
														null, null, X[g]), e[d] = c
												|| "solid", X[g].dashstyle = c;
							r || (j ? h[d] = c : f(h, d, c))
						}
					return m
				},
				clip : function(b) {
					var a = this, d = b.members;
					d.push(a);
					a.destroyClip = function() {
						B(d, a)
					};
					return a.css(b.getCSS(a.inverted))
				},
				css : function(b) {
					var a = this.element;
					if (a = b && a.tagName === "SPAN" && b.width)
						delete b.width, this.textWidth = a, this
								.updateTransform();
					this.styles = h(this.styles, b);
					A(this.element, b);
					return this
				},
				safeRemoveChild : function(b) {
					b.parentNode && ha(b)
				},
				destroy : function() {
					this.destroyClip && this.destroyClip();
					return La.prototype.destroy.apply(this)
				},
				empty : function() {
					for (var b = this.element.childNodes, a = b.length, d; a--;)
						d = b[a], d.parentNode.removeChild(d)
				},
				getBBox : function() {
					var b = this.element, a = this.bBox;
					if (!a) {
						if (b.nodeName === "text")
							b.style.position = ba;
						a = this.bBox = {
							x : b.offsetLeft,
							y : b.offsetTop,
							width : b.offsetWidth,
							height : b.offsetHeight
						}
					}
					return a
				},
				on : function(b, a) {
					this.element["on" + b] = function() {
						var b = lb.event;
						b.target = b.srcElement;
						a(b)
					};
					return this
				},
				updateTransform : function() {
					if (this.added) {
						var b = this, k = b.element, d = b.translateX || 0, c = b.translateY
								|| 0, j = b.x || 0, g = b.y || 0, e = b.textAlign
								|| "left", p = {
							left : 0,
							center : 0.5,
							right : 1
						}[e], f = e && e !== "left";
						(d || c) && b.css({
									marginLeft : d,
									marginTop : c
								});
						b.inverted && M(k.childNodes, function(a) {
									b.renderer.invertChild(a, k)
								});
						if (k.tagName === "SPAN") {
							var h, w, d = b.rotation, s;
							h = 0;
							var c = 1, n = 0, r;
							s = K(b.textWidth);
							var l = b.xCorr || 0, v = b.yCorr || 0, X = [d, e,
									k.innerHTML, b.textWidth].join(",");
							if (X !== b.cTT)
								a(d)
										&& (h = d * Cb, c = Ea(h), n = P(h), A(
												k, {
													filter : d
															? [
																	"progid:DXImageTransform.Microsoft.Matrix(M11=",
																	c,
																	", M12=",
																	-n,
																	", M21=",
																	n,
																	", M22=",
																	c,
																	", sizingMethod='auto expand')"]
																	.join("")
															: T
												})), h = k.offsetWidth, w = k.offsetHeight, h > s
										&& (A(k, {
													width : s + S,
													display : "block",
													whiteSpace : "normal"
												}), h = s), s = R((K(k.style.fontSize) || 12)
										* 1.2), l = c < 0 && -h, v = n < 0
										&& -w, r = c * n < 0, l += n * s
										* (r ? 1 - p : p), v -= c * s
										* (d ? r ? p : 1 - p : 1), f
										&& (l -= h * p * (c < 0 ? -1 : 1), d
												&& (v -= w * p
														* (n < 0 ? -1 : 1)), A(
												k, {
													textAlign : e
												})), b.xCorr = l, b.yCorr = v;
							A(k, {
										left : j + l,
										top : g + v
									});
							b.cTT = X
						}
					} else
						this.alignOnAdd = !0
				},
				rotate : function(b) {
					var k = this.element;
					a(b) && A(k, {
								rotation : Number(b),
								left : 0,
								top : 0
							})
				},
				shadow : function(b, a, d) {
					d || (d = {});
					var c = [], j = this.element, g = this.renderer, e, p = j.style, h, w = j.path, s = d.color
							|| "black", n = K(this.attr("stroke-width") || 1,
							10)
							+ 6, r = E(d.opacity, 1) * 0.06, d = !this.parentInverted != !d.inverted
							? -1
							: 1;
					w && typeof w.value !== "string" && (w = "x");
					if (b) {
						for (b = 1; b <= 3; b++)
							h = ['<shape isShadow="true" strokeweight="',
									n - 2 * b, '" filled="false" path="', w,
									'" coordsize="100,100" style="', p.cssText,
									'" />'], e = J(g.prepVML(h), null, {
										left : K(p.left) + d,
										top : K(p.top) + d
									}), h = ['<stroke endcap="round" color="',
									s, '" opacity="', r * b, '" dashStyle="',
									this.dashstyle, '"/>'], J(g.prepVML(h),
									null, null, e), a ? a.element
									.appendChild(e) : j.parentNode
									.insertBefore(e, j), f(e, {
										visibility : "hidden"
									}), c.push(e);
						this.shadows = c
					}
					return this
				},
				textBound : function() {
					var b = this.styles;
					if (this.element.nodeName.toLowerCase() === "span" && b
							&& (b.backgroundColor || b.borderColor)
							&& this.element.innerHTML == "")
						return A(this.element, {
									backgroundColor : N,
									borderColor : N,
									border : N
								}), this;
					b && b.backgroundOpacity && this.attr({
								opacity : b.backgroundOpacity
							});
					return this
				}
			}), ea = function() {
				this.init.apply(this, arguments)
			}, ea.prototype = ia(yc.prototype, {
				Element : aa,
				isIE8 : Db.indexOf("MSIE 8.0") > -1,
				type : "VML",
				init : function(b, a, d) {
					var c;
					this.alignedObjects = [];
					c = this.createElement(Ja);
					b.appendChild(c.element);
					this.box = c.element;
					this.boxWrapper = c;
					this.setSize(a, d, !1);
					if (!Qa.namespaces.hcv)
						Qa.namespaces.add("hcv",
								"urn:schemas-microsoft-com:vml"), Qa
								.createStyleSheet().cssText = "hcv\\:fill, hcv\\:path, hcv\\:shape, hcv\\:stroke{ behavior:url(#default#VML); display: inline-block; } "
				},
				clipRect : function(b, a, d, c) {
					var g = this.createElement();
					return h(g, {
						members : [],
						left : b,
						top : a,
						width : d,
						height : c,
						getCSS : function(b) {
							var a = this.top, k = this.left, d = k + this.width, c = a
									+ this.height, a = {
								clip : "rect(" + R(b ? k : a) + "px,"
										+ R(b ? c : d) + "px," + R(b ? d : c)
										+ "px," + R(b ? a : k) + "px)"
							};
							!b && j && h(a, {
										width : (d < 0 ? 0 : d) + S,
										height : (c < 0 ? 0 : c) + S
									});
							return a
						},
						updateClipping : function() {
							M(g.members, function(b) {
										b.css(g.getCSS(b.inverted))
									})
						}
					})
				},
				getArcPath : function(b, a, d, c, j, g, e, p, f, h) {
					return h || Da(d - j) >= 1 || Da(c - g) >= 1 ? [
							f ? "WA" : "AT", b - e, a - p, b + e, a + p, d, c,
							j, g] : [ra, j, g]
				},
				color : function(b, a, d) {
					var c, j = /^rgba/;
					if (b && b.linearGradient) {
						var g, e, p = b.linearGradient, f, h, w, s;
						M(b.stops, function(b, a) {
									j.test(b[1])
											? (c = ob(b[1]), g = c.get("rgb"), e = c
													.get("a"))
											: (g = b[1], e = 1);
									a ? (w = g, s = e) : (f = g, h = e)
								});
						b = 90 - ga.atan((p[3] - p[1]) / (p[2] - p[0])) * 180
								/ qb;
						d = ["<", d, ' colors="0% ', f, ",100% ", w,
								'" angle="', b, '" opacity="', s,
								'" o:opacity2="', h,
								'" type="gradient" focus="100%" />'];
						J(this.prepVML(d), null, null, a)
					} else if (b && b.FCcolor) {
						var p = E(b.FCcolor.color, "000000"), n = E(
								b.FCcolor.alpha, "100")
								+ "", r = E(b.FCcolor.ratio, "0"), l = O(
								b.FCcolor.angle, "0"), v = 100, p = p.replace(
								/\s+/ig, "").replace(/\,+$/ig, "").split(","), n = n
								.replace(/\s+/ig, "").replace(/\,+$/ig, "")
								.split(","), r = r.replace(/\s+/ig, "")
								.replace(/\,+$/ig, "").split(",");
						l -= 90;
						l *= -1;
						l %= 360;
						l < 0 && (l = 360 + l);
						if (p.length === 1)
							return d = ["<", d, ' opacity="',
									O(n[0], 100) / 100, '"/>'], J(this
											.prepVML(d), null, null, a), p[0]
									.replace(/^#?/, "#");
						else {
							var X, m, q, da, o = 0, t = "", C = !0;
							f = p[0].replace(/^#?/, "#");
							h = O(n[0], 100) / 100;
							for (X = 0; X < p.length && o < 100; X += 1)
								m = p[X].replace(/^#?/, "#"), v = q = O(n[X], v), da = O(
										r[X], X !== 0 ? (100 - o)
												/ (p.length - X) : 0), o += da, o > 100
										&& (o = 100), C
										&& (o > 0 && (t += "0% " + m + ","), C = !1), t += o
										+ "% " + m + ",";
							o < 100 && (t += "100% " + m + ",");
							w = m;
							s = q / 100;
							if (b.FCcolor.radialGradient)
								if (b.FCcolor.gradientUnits !== "objectBoundingBox")
									return d = [
											"<",
											d,
											' opacity="',
											O(b.FCcolor.defaultAlpha, n[0], 100)
													/ 100, '"/>'], J(this
													.prepVML(d), null, null, a), E(
											b.FCcolor.defaultColor, p[0],
											"000000").replace(/^#?/, "#");
								else
									d = ["<", d, ' colors="', t, '" color="',
											f, '" color2="', w,
											'" focusposition="',
											b.FCcolor.cx + "," + b.FCcolor.cy,
											'" opacity="', s, '" o:opacity2="',
											h,
											'" type="gradientTitle" focus="100%" />'];
							else
								d = ["<", d, ' colors="', t, '" angle="', l,
										'" color="', f, '" color2="', w,
										'" opacity="', s, '" o:opacity2="', h,
										'" type="gradient" focus="100%" />'];
							J(this.prepVML(d), null, null, a)
						}
					} else
						return j.test(b) && a.tagName !== "IMG"
								? (c = ob(b), d = ["<", d, ' opacity="',
										c.get("a"), '"/>'], J(this.prepVML(d),
										null, null, a), c.get("rgb"))
								: b
				},
				prepVML : function(b) {
					var a = this.isIE8, b = b.join("");
					a
							? (b = b
									.replace("/>",
											' xmlns="urn:schemas-microsoft-com:vml" />'), b = b
									.indexOf('style="') === -1
									? b
											.replace("/>",
													' style="display:inline-block;behavior:url(#default#VML);" />')
									: b
											.replace('style="',
													'style="display:inline-block;behavior:url(#default#VML);'))
							: b = b.replace("<", "<hcv:");
					return b
				},
				text : function(b, a, d, c, j) {
					c = r.chart.style;
					b = this.createElement("span").attr({
								text : b,
								x : R(a),
								y : R(d)
							}).css({
								whiteSpace : "nowrap",
								fontFamily : c.fontFamily,
								fontSize : c.fontSize
							});
					b._dx = o(j, 3);
					return b
				},
				path : function(b) {
					return this.createElement("shape").attr({
								coordsize : "100 100",
								d : b
							})
				},
				circle : function(b, a, d) {
					return this.symbol("circle").attr({
								x : b,
								y : a,
								r : Xb(d, 1)
							})
				},
				g : function(b) {
					var a;
					b && (a = {
						className : Fb + b,
						"class" : Fb + b
					});
					return this.createElement(Ja).attr(a)
				},
				image : function(b, a, d, c, j) {
					var g = this.createElement("img").attr({
								src : b
							});
					arguments.length > 1 && g.css({
								left : a,
								top : d,
								width : c,
								height : j
							});
					return g
				},
				rect : function(b, a, d, c, j, g) {
					if (t(b))
						a = b.y, d = b.width, c = b.height, j = b.r, g = b.strokeWidth, b = b.x;
					var e = this.symbol("rect");
					e.r = j;
					return e.attr(e.crisp(g, b, a, ca(d, 0), ca(c, 0)))
				},
				invertChild : function(b, a) {
					var d = a.style;
					A(b, {
								flip : "x",
								left : K(d.width) - 10,
								top : K(d.height) - 10,
								rotation : -90
							})
				},
				symbols : {
					arc : function(b, a, d, c) {
						var j = c.start, g = c.end, e = Ea(j), p = P(j), f = Ea(g), h = P(g), w = (c = c.innerR)
								&& 0.1 / c || 0;
						if (g - j === 0)
							return ["x"];
						else
							2 * qb - g + j < 0.07 / d ? (g = j + 2 * qb
									- 0.0010, f = Ea(g), h = P(g)) : g - j < w
									&& (f = Ea(j + w));
						return ["wa", b - d, a - d, b + d, a + d, b + d * e,
								a + d * p, b + d * f, a + d * h, "at", b - c,
								a - c, b + c, a + c, b + c * f, a + c * h,
								b + c * e, a + c * p, "x", "e"]
					},
					circle : function(b, a, d) {
						return ["wa", b - d, a - d, b + d, a + d, b + d, a,
								b + d, a, "e"]
					},
					rect : function(b, k, d, c) {
						if (!a(c))
							return [];
						var j = c.width, c = c.height, g = b + j, e = k + c, d = pb(
								d, j, c);
						return [Aa, b + d, k, ra, g - d, k, "wa", g - 2 * d, k,
								g, k + 2 * d, g - d, k, g, k + d, ra, g, e - d,
								"wa", g - 2 * d, e - 2 * d, g, e, g, e - d,
								g - d, e, ra, b + d, e, "wa", b, e - 2 * d,
								b + 2 * d, e, b + d, e, b, e - d, ra, b, k + d,
								"wa", b, k, b + 2 * d, k + 2 * d, b, k + d,
								b + d, k, "x", "e"]
					}
				}
			}), s = ea;
		vb.prototype.callbacks = [];
		var cc = function() {
		};
		cc.prototype = {
			init : function(b, a) {
				var d = b.chart.counters, c;
				this.series = b;
				this.applyOptions(a);
				this.pointAttr = {};
				this.index = b.pointCount;
				if (b.options.colorByPoint) {
					c = b.chart.options.colors;
					if (!this.options)
						this.options = {};
					this.color = this.options.color = this.color
							|| c[d.color++];
					d.wrapColor(c.length)
				}
				b.chart.pointCount++;
				b.pointCount++;
				return this
			},
			applyOptions : function(b) {
				var a = this.series;
				this.config = b;
				if (Ta(b) || b === null)
					this.y = b;
				else if (t(b) && !Ta(b.length))
					h(this, b), this.options = b;
				else if (z(b[0]))
					this.name = b[0], this.y = b[1];
				else if (Ta(b[0]))
					this.x = b[0], this.y = b[1];
				if (this.x === C)
					this.x = a.autoIncrement()
			},
			destroy : function() {
				var b = this, a = b.series, d = a.chart.hoverPoints, c;
				a.chart.pointCount--;
				d && (b.setState(), B(d, b));
				if (b === a.chart.hoverPoint)
					b.onMouseOut();
				ya(b);
				M(		["graphic", "tracker", "group", "dataLabel",
								"connector", "shadowGroup"], function(a) {
							b[a] && b[a].destroy()
						});
				b.legendItem && b.series.chart.legend.destroyItem(b);
				for (c in b)
					b[c] = null
			},
			getLabelConfig : function() {
				return {
					x : this.category,
					y : this.y,
					series : this.series,
					point : this,
					percentage : this.percentage,
					total : this.total || this.stackTotal
				}
			},
			select : function(b, a) {
				var d = this, c = d.series.chart, b = o(b, !d.selected);
				d.firePointEvent(b ? "select" : "unselect", {
							accumulate : a
						}, function() {
							d.selected = b;
							d.setState(b && "select");
							a || M(c.getSelectedPoints(), function(b) {
										if (b.selected && b !== d)
											b.selected = !1, b.setState(Ba), b
													.firePointEvent("unselect")
									})
						})
			},
			onMouseOver : function() {
				var b = this.series.chart, a = b.tooltip, d = b.hoverPoint;
				if (d && d !== this)
					d.onMouseOut();
				this.firePointEvent("mouseOver");
				a && !a.shared && a.refresh(this);
				this.link !== void 0 && this.series.tracker
						&& this.series.tracker.css({
									cursor : "pointer",
									_cursor : "hand"
								});
				this.setState(wb);
				b.hoverPoint = this
			},
			onMouseOut : function() {
				this.firePointEvent("mouseOut");
				this.setState();
				this.series.chart.hoverPoint = null;
				this.link !== void 0 && this.series.tracker
						&& this.series.tracker.css({
									cursor : "auto",
									_cursor : "auto"
								})
			},
			tooltipFormatter : function(b) {
				var a = this.series;
				return ['<span style="color:' + a.color + '">',
						this.name || a.name, "</span>: ",
						!b ? "<b>x = " + (this.name || this.x) + ",</b> " : "",
						"<b>", !b ? "y = " : "", this.y, "</b>"].join("")
			},
			update : function(b, a, d) {
				var c = this, j = c.series, g = c.graphic, e = j.chart, a = o(
						a, !0);
				c.firePointEvent("update", {
							options : b
						}, function() {
							c.applyOptions(b);
							t(b)
									&& (j.getAttribs(), g
											&& g.attr(c.pointAttr[j.state]));
							j.isDirty = !0;
							a && e.redraw(d)
						})
			},
			remove : function(b, a) {
				var d = this, c = d.series, j = c.chart, g = c.data;
				kb(a, j);
				b = o(b, !0);
				d.firePointEvent("remove", null, function() {
							B(g, d);
							d.destroy();
							c.isDirty = !0;
							b && j.redraw()
						})
			},
			firePointEvent : function(b, a, d) {
				var c = this, j = this.series.options;
				(j.point.events[b] || c.options && c.options.events
						&& c.options.events[b])
						&& this.importEvents();
				b === "click" && j.allowPointSelect && (d = function(b) {
					c.select(null, b.ctrlKey || b.metaKey || b.shiftKey)
				});
				Ia(this, b, a, d)
			},
			importEvents : function() {
				if (!this.hasImportedEvents) {
					var b = ia(this.series.options.point, this.options).events, a;
					this.events = b;
					for (a in b)
						za(this, a, b[a]);
					this.hasImportedEvents = !0
				}
			},
			setState : function(b) {
				var a = this.series, d = a.options.states, c = Ha[a.type].marker
						&& a.options.marker, j = c && !c.enabled, g = (c = c
						&& c.states[b])
						&& c.enabled === !1, e = a.stateMarkerGraphic, p = a.chart, f = this.pointAttr, b = b
						|| Ba;
				if (!(b === this.state || this.selected && b !== "select"
						|| d[b] && d[b].enabled === !1 || b
						&& (g || j && !c.enabled))) {
					if (this.graphic)
						this.graphic.attr(f[b]);
					else {
						if (b) {
							if (!e)
								a.stateMarkerGraphic = e = p.renderer.circle(0,
										0, f[b].r).attr(f[b]).add(a.group);
							e.translate(this.plotX, this.plotY)
						}
						if (e)
							e[b ? "show" : "hide"]()
					}
					this.state = b
				}
			}
		};
		var nb = function() {
		};
		nb.prototype = {
			isCartesian : !0,
			type : "line",
			pointClass : cc,
			pointAttrToOptions : {
				stroke : "lineColor",
				"stroke-width" : "lineWidth",
				fill : "fillColor",
				r : "radius"
			},
			init : function(b, a) {
				var d, c;
				c = b.series.length;
				this.chart = b;
				a = this.setOptions(a);
				h(this, {
							index : c,
							options : a,
							pointCount : 0,
							name : E(a.name) === void 0 ? "" : a.name,
							state : Ba,
							pointAttr : {},
							visible : a.visible !== !1,
							selected : a.selected === !0
						});
				c = a.events;
				for (d in c)
					za(this, d, c[d]);
				if (c && c.click || a.point && a.point.events
						&& a.point.events.click || a.allowPointSelect)
					b.runTrackerClick = !0;
				this.getColor();
				this.getSymbol();
				this.setData(a.data, !1)
			},
			autoIncrement : function() {
				var b = this.options, a = this.xIncrement, a = o(a,
						b.pointStart, 0);
				this.pointInterval = o(this.pointInterval, b.pointInterval, 1);
				this.xIncrement = a + this.pointInterval;
				return a
			},
			cleanData : function() {
				var b = this.chart, a = this.data, d, c, j = b.smallestInterval, g, e;
				zb(a, function(b, a) {
							return b.x - a.x
						});
				if (this.options.connectNulls)
					for (e = a.length - 1; e >= 0; e--)
						a[e].y === null && a[e - 1] && a[e + 1]
								&& a.splice(e, 1);
				for (e = a.length - 1; e >= 0; e--)
					if (a[e - 1]
							&& (g = a[e].x - a[e - 1].x, g > 0
									&& (c === C || g < c)))
						c = g, d = e;
				if (j === C || c < j)
					b.smallestInterval = c;
				this.closestPoints = d
			},
			getSegments : function() {
				var b = this.data, a = [], d = -1;
				this.options.connectNullData ? (M(b, function(d, c) {
							typeof d.y == "number" && a.push(b[c])
						}), a = [a]) : M(b, function(c, j) {
							typeof c.y != "number"
									? (j > d + 1 && a.push(b.slice(d + 1, j)), d = j)
									: j == b.length - 1
											&& a.push(b.slice(d + 1, j + 1))
						});
				this.segments = a
			},
			setOptions : function(b) {
				var a = this.chart.options.plotOptions;
				return ia(a[this.type], a.series, b)
			},
			getColor : function() {
				var b = this.chart.options.colors, a = this.chart.counters;
				this.color = this.options.color || b[a.color++] || "#0000ff";
				a.wrapColor(b.length)
			},
			getSymbol : function() {
				var b = this.chart.options.symbols, a = this.chart.counters;
				this.symbol = this.options.marker.symbol || b[a.symbol++];
				a.wrapSymbol(b.length)
			},
			addPoint : function(b, a, d, c) {
				var j = this.data, g = this.graph, e = this.area, p = this.chart, b = (new this.pointClass)
						.init(this, b);
				kb(c, p);
				if (g && d)
					g.shift = d;
				if (e)
					e.shift = d, e.isArea = !0;
				a = o(a, !0);
				j.push(b);
				d && j[0].remove(!1);
				this.getAttribs();
				this.isDirty = !0;
				a && p.redraw()
			},
			setData : function(b, d) {
				var c = this, j = c.data, g = c.initialColor, e = c.chart, p = j
						&& j.length || 0;
				c.xIncrement = null;
				if (a(g))
					e.counters.color = g;
				for (b = hc(D(b || []), function(b) {
							return (new c.pointClass).init(c, b)
						}); p--;)
					j[p].destroy();
				c.data = b;
				c.cleanData();
				c.getSegments();
				c.getAttribs();
				c.isDirty = !0;
				e.isDirtyBox = !0;
				o(d, !0) && e.redraw(!1)
			},
			remove : function(b, a) {
				var d = this, c = d.chart, b = o(b, !0);
				if (!d.isRemoving)
					d.isRemoving = !0, Ia(d, "remove", null, function() {
								d.destroy();
								c.isDirtyLegend = c.isDirtyBox = !0;
								b && c.redraw(a)
							});
				d.isRemoving = !1
			},
			translate : function() {
				for (var b = this.chart, d = this.options.stacking, c = this.xAxis.categories, j = this.yAxis, g = this.data, e = g.length; e--;) {
					var p = g[e], f = p.x, h = p.y, w = p.low, s = j.stacks[(h < 0
							? "-"
							: "")
							+ this.stackKey];
					p.plotX = this.xAxis.translate(f);
					if (d && s && s[f]) {
						var f = s[f], s = f.total, n = j.options.min, w = f.cum;
						f.cum += h;
						h = ca(n, w + h);
						w = ca(n, w);
						d === "percent"
								&& (w = s ? w * 100 / s : 0, h = s ? h * 100
										/ s : 0);
						p.percentage = s ? p.y * 100 / s : 0;
						p.stackTotal = s
					}
					if (a(w))
						p.yBottom = j.translate(w, 0, 1, 0, 1);
					if (h !== null)
						p.plotY = j.translate(h, 0, 1, 0, 1);
					p.clientX = b.inverted ? b.plotHeight - p.plotX : p.plotX;
					p.category = c && c[p.x] !== C ? c[p.x] : p.x
				}
			},
			setTooltipPoints : function(b) {
				var a = this.chart, d = a.inverted, c = [], j = R((d
						? a.plotTop
						: a.plotLeft)
						+ a.plotSizeX), g, e, p = [];
				if (b)
					this.tooltipPoints = null;
				M(this.segments, function(b) {
							c = c.concat(b)
						});
				this.xAxis && this.xAxis.reversed && (c = c.reverse());
				M(c, function(b, a) {
							g = c[a - 1] ? c[a - 1]._high + 1 : 0;
							for (e = b._high = c[a + 1] ? yb((b.plotX + (c[a
									+ 1] ? c[a + 1].plotX : j))
									/ 2) : yb(b.plotX + 30); g <= e;)
								p[d ? j - g++ : g++] = b
						});
				this.tooltipPoints = p
			},
			onMouseOver : function() {
				var b = this.chart, a = b.hoverSeries;
				if (da || !b.mouseIsDown) {
					if (a && a !== this)
						a.onMouseOut();
					this.options.events.mouseOver && Ia(this, "mouseOver");
					this.tracker && this.tracker.toFront();
					this.setState(wb);
					b.hoverSeries = this
				}
			},
			onMouseOut : function() {
				var b = this.options, a = this.chart, d = a.tooltip, c = a.hoverPoint;
				if (c)
					c.onMouseOut();
				this && b.events.mouseOut && Ia(this, "mouseOut");
				d && !b.stickyTracking && d.hide();
				this.setState();
				a.hoverSeries = null
			},
			animate : function(b) {
				var a = this.clipRect, d = this.options.animation;
				d && !t(d) && (d = {});
				if (b) {
					if (!a.isAnimating)
						a.attr({
									width : 0
								}), a.isAnimating = !0
				} else
					a.animate({
								width : a.cliprectW
							}, d), this.animate = null
			},
			drawPoints : function() {
				var b, a = this.data, d = this.chart, c, j, g, e, p, f, h;
				if (this.options.marker.enabled)
					for (g = a.length; g--;)
						if (e = a[g], c = e.plotX, j = e.plotY, h = e.graphic, j !== C
								&& !isNaN(j))
							b = e.pointAttr[e.selected ? "select" : Ba], p = b.r, f = (e.marker
									&& e.marker.startAngle || 90)
									* Cb, h ? h.animate({
										x : c,
										y : j,
										r : p
									}) : e.graphic = d.renderer
									.symbol(
											o(e.marker && e.marker.symbol,
													this.symbol), c, j, p, {
												startAngle : f
											}).attr(b).add(this.group)
			},
			convertAttribs : function(b, a, d, c) {
				var j = this.pointAttrToOptions, g, e, p = {}, b = b || {}, a = a
						|| {}, d = d || {}, c = c || {};
				for (g in j)
					e = j[g], p[g] = o(b[e], a[g], d[g], c[g]);
				return p
			},
			getAttribs : function() {
				var b = this, d = Ha[b.type].marker
						? b.options.marker
						: b.options, c = d.states, j = c[wb], g, e = b.color, p = {
					stroke : e,
					fill : e
				}, f = b.data, h = [], w, s = b.pointAttrToOptions, n;
				b.options.marker
						? (j.radius = j.radius || d.radius + 2, j.lineWidth = j.lineWidth
								|| d.lineWidth + 1)
						: j.color = j.color
								|| ob(j.color || e).brighten(j.brightness)
										.get();
				h[Ba] = b.convertAttribs(d, p);
				M([wb, "select"], function(a) {
							h[a] = b.convertAttribs(c[a], h[Ba])
						});
				b.pointAttr = h;
				for (e = f.length; e--;) {
					p = f[e];
					if ((d = p.options && p.options.marker || p.options)
							&& d.enabled === !1)
						d.radius = 0;
					g = !1;
					if (p.options)
						for (n in s)
							a(d[s[n]]) && (g = !0);
					if (g) {
						w = [];
						c = d.states || {};
						g = c[wb] = c[wb] || {};
						if (!b.options.marker)
							g.color = ob(g.color || p.options.color)
									.brighten(g.brightness || j.brightness)
									.get();
						w[Ba] = b.convertAttribs(d, h[Ba]);
						w[wb] = b.convertAttribs(c[wb], h[wb], w[Ba]);
						w.select = b.convertAttribs(c.select, h.select, w[Ba])
					} else
						w = h;
					p.pointAttr = w
				}
			},
			destroy : function() {
				var b = this, a = b.chart, d = b.clipRect, c = /\/5[0-9\.]+ (Safari|Mobile)\//
						.test(Db), j, g;
				Ia(b, "destroy");
				ya(b);
				b.legendItem && b.chart.legend.destroyItem(b);
				M(b.data, function(b) {
							b.destroy()
						});
				b.graphLine && M(b.graphLine, function(b) {
							b.destroy()
						});
				if (d && d !== a.clipRect)
					b.clipRect = d.destroy();
				M(["area", "graph", "dataLabelsGroup", "group", "tracker"],
						function(a) {
							b[a]
									&& (j = c && a === "group"
											? "hide"
											: "destroy", b[a][j]())
						});
				if (a.hoverSeries === b)
					a.hoverSeries = null;
				B(a.series, b);
				for (g in b)
					delete b[g]
			},
			drawDataLabels : function() {
				if (this.options.dataLabels.enabled) {
					var b, d, c = this.data, j = this.options, g = j.dataLabels, e, p = this.dataLabelsGroup, f = this.chart, h = f.renderer, w = f.options.chart, s = f.inverted, n = this.type, r = j.stacking, l = /^(column|column3d|bar|bar3d|floatedcolumn)$/
							.test(n), v = g.verticalAlign === null, X = g.y === null, m = f.plotWidth, q = f.plotHeight, da = h.smartLabel, t, C, sa, xa, ua, G, J, Sa, ba, A = /^(line|area|stepzoom)$/
							.test(n), L = this.depthYDisplacement || 0, B = this.depthXDisplacement
							|| 0, Ja, S = g.style.fontSize.replace(/px/, ""), F = h.box.nodeName == "svg"
							&& !r ? 2 : 0, z, E, D = !1, y = w.valuePadding, aa = 2
							+ y, Q = n == "floatedcolumn", Aa = f.options.chart.usePerPointLabelColor;
					da.setStyle(g.style);
					if (l)
						r ? (v && (g = ia(g, {
									verticalAlign : "middle"
								})), X && (g = ia(g, {
									y : {
										top : 14,
										middle : 4,
										bottom : -6
									}[g.verticalAlign]
								})), g.align = "center") : v && (g = ia(g, {
									verticalAlign : "top"
								}));
					if (!/^(bar|pie|bar3d)$/.test(n))
						g.rotation = xa = w.rotateValues == 1 ? 270 : void 0;
					if (/^(column|column3d|bar|bar3d|floatedcolumn)$/.test(n))
						t = w.placeValuesInside;
					p
							? p.translate(f.plotLeft, f.plotTop)
							: (p = this.dataLabelsGroup = h.g("data-labels")
									.attr({
												visibility : this.visible
														? gb
														: V,
												zIndex : 6
											}).translate(f.plotLeft, f.plotTop)
									.add(), f.options.chart.hasScroll
									&& p.clip(this.clipRect));
					f = g.color;
					f === "auto" && (f = null);
					g.style.color = o(f, this.color, "black");
					M(c, function(f, w) {
						var v = f.barX, ja = v && v + f.barW / 2
								|| (f.plotX != null ? f.plotX : -999), Oa = o(
								f.plotY, -999), M = f.dataLabel, V = g.align, T = X
								? f.y >= 0 ? -6 : 12
								: g.y;
						Sa = g.formatter.call(f.getLabelConfig());
						if (Sa != null) {
							Q && (Oa = O(f.barY, Oa));
							J = da.getOriSize(Sa, void 0, void 0, !1);
							e = J.text;
							b = (s ? m - Oa : ja) + g.x;
							d = (s ? q - ja : Oa) + T;
							ba = void 0;
							z = fc(f.valuePosition, "auto").toLowerCase();
							if (A)
								switch (z) {
									case "above" :
										t = 0;
										break;
									case "below" :
										t = 1;
										break;
									default :
										E = c[w - 1], t = (E && E.plotY) < f.plotY
												? 1
												: 0
								}
							D = f.y < 0;
							ja = Number(Q ? f.barY : f.plotY);
							if (xa) {
								V = "left";
								T = D ? -4 - y : T + 2 - y;
								sa = J.width - T;
								C = J.height - T;
								Ja = J.width;
								ua = O(f.barH, q - ja);
								G = ja;
								if (sa <= G) {
									d = G + T;
									if (D) {
										d = Oa - T + L;
										V = "right";
										if (t && ua > sa || sa > q - Oa)
											d = Oa + T + L, V = "left";
										b += B
									}
									t
											&& !D
											&& f.y != 0
											&& sa <= ua
											&& (V = D ? "center" : "right", d = G
													- T + L, b += B)
								} else
									sa <= ua
											? (V = "right", d = G - T + L, b += B, D
													&& (d = G - T + L))
											: (d = G + T, ba = G, ua > G
													&& Q
													&& (d = q + L, b += B, ba = ua), d < Ja
													&& (d = 0, V = "right"));
								b += S / 2 - F
							} else
								T = D ? -4 - y : T + 2 - y, C = J.width + aa, sa = S
										- T, Ja = S, ua = q - ja, G = ja, /^(bar|bar3d)$/
										.test(n)
										? (d -= F, ua = f.barH, G = m - f.barH, D
												? (G = m - ja, t && ua > C
														|| C > G && ua > C
														? (b = G + y + 2 + B, d += L)
														: C < G
																? (b = G
																		- (y + 2)
																		+ B, d += L, V = "right")
																: (b = 6, V = "left"))
												: (G = ja, t && ua > C || C > G
														&& ua > C
														? (b = m - G - (y + 2)
																+ B, V = "right", d += L)
														: C < G
																? b = m
																		- G
																		+ (y + 2)
																: (b = m - 6, d += L, V = "right")), b < 0
												&& (b = 6, V = "left"), b > m
												&& (b = m - 6, V = "right"))
										: (D
												? (G = O(f.barH, ja), d = t
														&& G > sa || sa > ua
														? Oa + T + L
														: Oa + sa + L, b += B)
												: (ua = O(f.barH, q - ja), t
														&& ua >= sa && f.y != 0
														|| sa > G
														? (d = Oa + sa + L, b += B)
														: d = Oa + T, n == "bubble"
														&& (d = Oa - T / 2)), d > q
												&& (d = q), d < 0 && (d = Ja));
							V = r ? "center" : V;
							if (ba)
								J = da.getOriSize(Sa, ba, void 0, !0), e = J.text;
							if (M)
								s
										&& !g.y
										&& (d = d + K(M.styles.lineHeight)
												* 0.9 - M.getBBox().height / 2), M
										.attr({
													text : e
												}).animate({
													x : b,
													y : d
												});
							else if (a(e)
									&& (M = f.dataLabel = h.text(e, b, d).attr(
											{
												align : V,
												rotation : g.rotation,
												zIndex : 1
											}).css(g.style).add(p), Aa
											&& f.color && f.color.FCcolor
											&& f.color.FCcolor.color
											&& f.color.FCcolor.color.toString
											&& M.css({
														color : "#"
																+ f.color.FCcolor.color
																		.split(",")[0]
																		.replace(
																				Wa,
																				N)
													}), s && !g.y && M.attr({
												y : d + K(M.styles.lineHeight)
														* 0.9
														- M.getBBox().height
														/ 2
											}), l && j.stacking && M))
								Oa = f.barY, V = f.barW, T = f.barH, M.align(g,
										null, {
											x : s ? m - Oa - T : v + B,
											y : s ? q - v - V + S / 2 + L : Oa,
											width : s ? T : V,
											height : s ? V : T
										})
						}
					})
				}
			},
			drawGraph : function() {
				var b = this, a = b.options, d = [], c, g = b.area, j = b.group, e = a.lineColor
						|| b.color, p = a.lineWidth, f = a.dashStyle, h, w = b.chart.renderer, s = b.yAxis
						.getThreshold(a.threshold || 0), n = /^area/
						.test(b.type), r = [], l = [], v, X = [], m = [], q, t = 0, da = [], C = b.shadowGroup, sa = a.step, xa = a.drawVerticalJoins;
				if (!C && a.shadow)
					C = b.shadowGroup = w.g("shadow").add(j), C.floated = !0;
				M(b.segments, function(c) {
					h = [];
					M(c, function(a, d) {
						var k, g;
						b.getPointSpline
								? (h.push.apply(h, b.getPointSpline(c, a, d)), g = b
										.getPointSpline(c, a, d), g[0] == "C"
										? (k = c[d - 1], X.push(da.concat(g)), m
												.push(k.config), t++, da = [Aa]
												.concat(g.slice(g.length - 2)))
										: da = g)
								: (h.push(d ? ra : Aa), d
										&& sa
										&& (k = c[d - 1], h.push(a.plotX,
												k.plotY)), d
										&& (k = c[d - 1], X[t] = [], sa
												? (X[t].push(Aa, k.plotX,
														k.plotY, ra, a.plotX,
														k.plotY), xa
														&& X[t].push(a.plotX,
																a.plotY))
												: X[t].push(Aa, k.plotX,
														k.plotY, ra, a.plotX,
														a.plotY), m
												.push(k.config), t++), h.push(
										a.plotX, a.plotY))
					});
					c.length > 1 ? d = d.concat(h) : c.length && r.push(c[0]);
					if (n) {
						var g = [], j, e = h.length;
						for (j = 0; j < e; j++)
							g.push(h[j]);
						e === 3 && g.push(ra, h[1], h[2]);
						if (a.stacking && b.type !== "areaspline")
							for (j = c.length - 1; j >= 0; j--)
								g.push(c[j].plotX, c[j].yBottom);
						else
							c.length > 0
									&& g.push(ra, c[c.length - 1].plotX, s, ra,
											c[0].plotX, s);
						l = l.concat(g)
					}
				});
				if (n) {
					var ua = [];
					M(X, function(d) {
								var c = [], g, j = d.length;
								for (g = 0; g < j; g++)
									c.push(d[g]);
								if (a.stacking && b.type !== "areaspline")
									for (g = X.length - 1; g >= 0; g--);
								else
									c.push(ra, d[d.length - 2], s, ra, d[1], s);
								ua.push(c)
							})
				}
				b.graphPath = d;
				b.singlePoints = r;
				if (n)
					c = o(a.fillColor, ob(b.color).setOpacity(a.fillOpacity
									|| 0.75).get()), g ? g.animate({
								d : l
							}) : b.area = b.chart.renderer.path(l).attr({
								fill : c
							}).add(j);
				var G, L;
				if (n || b.getPointSpline)
					if (L = b.graphLine, v = {
						stroke : e,
						"stroke-width" : p,
						"stroke-linecap" : "round",
						"stroke-linejoin" : "round",
						dashstyle : f
					}, L)
						L.animate({
									d : h
								});
					else {
						if (p)
							q = m, b.graphLine = w.path(h).attr(v).add(j)
									.shadow(a.shadow, C, q.shadow)
					}
				else {
					if (!b.graphLine)
						b.graphLine = [];
					M(X, function(d, c) {
								G = b.graphLine;
								(L = G[c]) ? L.animate({
											d : d
										}) : p
										&& (q = m[c], v = {
											stroke : E(q.color, e),
											"stroke-width" : p,
											"stroke-linecap" : "round",
											dashstyle : E(q.dashStyle, f)
										}, G[c] = w.path(d).attr(v).add(j)
												.shadow(a.shadow, C, q.shadow))
							})
				}
			},
			render : function() {
				var b = this, a = b.chart, d, c, g = b.options, j = g.animation, e = j
						&& b.animate, j = e ? j && j.duration || 500 : 0, p = b.clipRect, f = a.renderer;
				if (!p) {
					var h = 0, w = 0, s = a.plotSizeX, n = a.plotSizeY;
					a.options.chart.hasScroll
							|| (h = -(a.inverted ? a.plotTop : a.plotLeft), w = -(a.inverted
									? a.plotLeft
									: a.plotTop), s = a.inverted
									? a.chartHeight
									: a.chartWidth, n = a.inverted
									? a.chartWidth
									: a.chartHeight);
					p = b.clipRect = !a.hasRendered && a.clipRect
							? a.clipRect
							: f.clipRect(h, w, s, n);
					p.cliprectX = h;
					p.cliprectY = w;
					p.cliprectW = s;
					p.cliprectH = n;
					if (!a.clipRect)
						a.clipRect = p
				}
				if (!b.group)
					d = b.group = f.g("series"), a.inverted && (c = function() {
						d.attr({
									width : a.plotWidth,
									height : a.plotHeight
								}).invert()
					}, c(), za(a, "resize", c), za(b, "destroy", function() {
								ya(a, "resize", c)
							})), d.clip(b.clipRect).attr({
								visibility : b.visible ? gb : V,
								zIndex : g.zIndex
							}).translate(a.plotLeft, a.plotTop)
							.add(a.seriesGroup);
				b.drawDataLabels();
				e && b.animate(!0);
				b.drawGraph && b.drawGraph();
				b.drawPoints();
				b.options.enableMouseTracking !== !1 && b.drawTracker();
				e && b.animate();
				setTimeout(function() {
							p.isAnimating = !1;
							if ((d = b.group) && p !== a.clipRect && p.renderer)
								d.clip(b.clipRect = a.clipRect), p.destroy()
						}, j);
				b.isDirty = !1
			},
			redraw : function() {
				var b = this.chart, a = this.group;
				a && (b.inverted && a.attr({
							width : b.plotWidth,
							height : b.plotHeight
						}), a.animate({
							translateX : b.plotLeft,
							translateY : b.plotTop
						}));
				this.translate();
				this.setTooltipPoints(!0);
				this.render()
			},
			setState : function(b) {
				var a = this.options, d = this.graph, c = a.states, a = a.lineWidth, b = b
						|| Ba;
				if (this.state !== b)
					this.state = b, c[b]
							&& c[b].enabled === !1
							|| (b && (a = c[b].lineWidth || a + 1), d
									&& !d.dashstyle && d.attr({
												"stroke-width" : a
											}, b ? 0 : 500))
			},
			setVisible : function(b, a) {
				var d = this.chart, c = this.legendItem, g = this.group, j = this.tracker, e = this.dataLabelsGroup, p = this.shadowGroup, f, h = this.data, w = d.options.chart.ignoreHiddenSeries;
				f = this.visible;
				f = (this.visible = b = b === C ? !f : b) ? "show" : "hide";
				if (g)
					g[f]();
				if (p && p.floated)
					p[f]();
				if (j)
					j[f]();
				else
					for (g = h.length; g--;)
						if (j = h[g], j.tracker)
							j.tracker[f]();
				if (e)
					e[f]();
				c && d.legend.colorizeItem(this, b);
				this.isDirty = !0;
				this.options.stacking && M(d.series, function(b) {
							if (b.options.stacking && b.visible)
								b.isDirty = !0
						});
				if (w)
					d.isDirtyBox = !0;
				a !== !1 && d.redraw();
				Ia(this, f)
			},
			show : function() {
				this.setVisible(!0)
			},
			hide : function() {
				this.setVisible(!1)
			},
			scroll : function(b, a, d) {
				var c = this.chart, g = this.clipRect, j = c.plotLeft - b, e = c.plotTop
						- a, p = this.data, f = 0, h = p.length;
				this.group.translate(j, e);
				this.dataLabelsGroup.translate(j, e);
				c.trackerGroup.translate(j, e);
				g.attr({
							x : b,
							y : a
						});
				if (d === void 0 || d) {
					for (; f < h; f += 1)
						if (d = p[f], d.y !== null)
							c = d.plotX - b + 20, g = d.plotY - a - 15, c = c < 0
									? 0
									: c, g = g < 0 ? 0 : g, d.tooltipPos = [c,
									g];
					this.xShift = R(b);
					this.yShift = R(a)
				}
			},
			select : function(b) {
				this.selected = b = b === C ? !this.selected : b;
				if (this.checkbox)
					this.checkbox.checked = b;
				Ia(this, b ? "select" : "unselect")
			},
			drawTracker : function() {
				var b = this, a = b.options, d = [].concat(b.graphPath), c = d.length, g = b.chart, j = g.options.tooltip.snap, e = b.tracker, p = a.cursor, p = p
						&& {
							cursor : p
						}, f = b.singlePoints, h;
				g.options.chart.hasScroll && g.trackerGroup.clip(b.clipRect);
				if (c)
					for (h = c + 1; h--;)
						d[h] === Aa
								&& d.splice(h + 1, 0, d[h + 1] - j, d[h + 2],
										ra), (h && d[h] === Aa || h === c)
								&& d.splice(h, 0, ra, d[h - 2] + j, d[h - 1]);
				for (h = 0; h < f.length; h++)
					c = f[h], d.push(Aa, c.plotX - j, c.plotY, ra, c.plotX + j,
							c.plotY);
				e ? e.attr({
							d : d
						}) : b.tracker = g.renderer.path(d).attr({
							isTracker : !0,
							stroke : Gb,
							fill : T,
							"stroke-width" : a.lineWidth + 2 * j,
							visibility : b.visible ? gb : V,
							zIndex : a.zIndex || 1
						}).on(da ? "touchstart" : "mouseover", function() {
							if (g.hoverSeries !== b)
								b.onMouseOver()
						}).on("mouseout", function() {
							if (!a.stickyTracking)
								b.onMouseOut()
						}).css(p).add(g.trackerGroup)
			}
		};
		ea = q(nb);
		Fa.line = ea;
		ea = q(nb, {
					type : "area"
				});
		Fa.area = ea;
		ea = q(nb, {
			type : "spline",
			getPointSpline : function(b, a, d) {
				var c = a.plotX, g = a.plotY, j = b[d - 1], e = b[d + 1], p, f, h, w;
				if (d && d < b.length - 1) {
					b = j.plotY;
					h = e.plotX;
					var e = e.plotY, s;
					p = (1.5 * c + j.plotX) / 2.5;
					f = (1.5 * g + b) / 2.5;
					h = (1.5 * c + h) / 2.5;
					w = (1.5 * g + e) / 2.5;
					s = (w - f) * (h - c) / (h - p) + g - w;
					f += s;
					w += s;
					f > b && f > g ? (f = ca(b, g), w = 2 * g - f) : f < b
							&& f < g && (f = pb(b, g), w = 2 * g - f);
					w > e && w > g ? (w = ca(e, g), f = 2 * g - w) : w < e
							&& w < g && (w = pb(e, g), f = 2 * g - w);
					a.rightContX = h;
					a.rightContY = w
				}
				d
						? (a = ["C", j.rightContX || j.plotX,
								j.rightContY || j.plotY, p || c, f || g, c, g], j.rightContX = j.rightContY = null)
						: a = [Aa, c, g];
				return a
			}
		});
		Fa.spline = ea;
		ea = q(ea, {
					type : "areaspline"
				});
		Fa.areaspline = ea;
		var dc = q(nb, {
			type : "column",
			pointAttrToOptions : {
				stroke : "borderColor",
				"stroke-width" : "borderWidth",
				fill : "color",
				r : "borderRadius",
				dashstyle : "dashStyle"
			},
			init : function() {
				nb.prototype.init.apply(this, arguments);
				var b = this, a = b.chart;
				a.hasColumn = !0;
				a.hasRendered && M(a.series, function(a) {
							if (a.type === b.type)
								a.isDirty = !0
						})
			},
			translate : function() {
				var b = this, d = b.chart, c = b.options, g = c.stacking, j = c.borderWidth, e = 0, f = b.xAxis.reversed, p = b.xAxis.categories, w = {}, s, n;
				nb.prototype.translate.apply(b);
				M(d.series, function(a) {
					if (a.type === b.type)
						a.options.stacking ? (s = a.stackKey, w[s] === C
								&& (w[s] = e++), n = w[s]) : n = e++, a.columnIndex = n
				});
				var r = b.data, l = b.closestPoints, d = Da(r[1] ? r[l].plotX
						- r[l - 1].plotX : d.plotSizeX / (p && p.length || 1)), p = d
						* c.groupPadding, l = (d - 2 * p) / e, v = c.pointWidth, X = a(v)
						? (l - v) / 2
						: l * c.pointPadding, m = ca(o(v, l - 2 * X), 1), v = Da(O(
						c.maxColWidth, 50))
						|| 1;
				m > v && c.groupPadding === 0.1
						&& (p += (m - v) * e / 2, l = m = v);
				var q = X
						+ (p + ((f ? e - b.columnIndex : b.columnIndex) || 0)
								* l - d / 2) * (f ? -1 : 1), f = O(c.threshold,
						ca(b.yAxis.options.min, 0), 0), t = b.yAxis
						.getThreshold(f), da = o(c.minPointLength, 5);
				M(r, function(d) {
					var k = d.plotY, e = O(d.yBottom, t), p = d.plotX + q, f = Qb(pb(
							k, e)), w = Qb(ca(k, e) - f), s = b.yAxis.stacks[(d.y < 0
							? "-"
							: "")
							+ b.stackKey], n;
					g && s && s[d.x] && s[d.x].setOffset(q, m);
					Da(w) < da
							&& (da
									&& (w = da, f = Da(f - t) > da ? e - da : t
											- (k <= t ? da : 0)), n = f - 3);
					h(d, {
								barX : p,
								barY : f,
								barW : m,
								barH : w
							});
					d.shapeType = "rect";
					k = {
						x : R(p),
						y : R(f),
						width : R(m),
						height : R(w),
						r : c.borderRadius
					};
					j % 2 && (k.y -= 1, k.height += 1);
					d.shapeArgs = k;
					d.trackerArgs = a(n) && ia(d.shapeArgs, {
								height : ca(6, w + 3),
								y : n
							})
				})
			},
			getSymbol : function() {
			},
			drawGraph : function() {
			},
			drawPoints : function() {
				var b = this, a = b.options, d = b.chart.renderer, c, g, j = b.shadowGroup, e, f, p, h, w, s, n = b.yAxis, l = n.reversed
						&& n.options.min < 0 ? !0 : !1, r = d.box.nodeName
						.toLowerCase() === "div" ? !0 : !1, v = b.inverted;
				M(b.data, function(n) {
					var X = n.plotY;
					if (X !== C && !isNaN(X) && n.y !== null)
						c = n.graphic, g = n.shapeArgs, c
								? (wc(c), c.animate(g))
								: (p = g.y, h = g.width, w = g.height, e = g.r, f = g.x, s = n.pointAttr[n.selected
										? "select"
										: Ba]["stroke-width"]
										% 2 === 0 ? void 0 : 1, l && n.color
										&& n.color.FCcolor
										&& (n.color.FCcolor.angle += 180), r
										&& v && n.color && n.color.FCcolor
										&& (n.color.FCcolor.angle += 90), n.graphic = d[n.shapeType](
										f, p, h, w, e, s)
										.attr(n.pointAttr[n.selected
												? "select"
												: Ba]).add(b.group).shadow(
												a.shadow, j, n.shadow))
				})
			},
			drawTracker : function() {
				var b = this, a = b.chart, d = a.renderer, c, g, j = +new Date, e = b.options, p;
				a.options.chart.hasScroll && a.trackerGroup.clip(b.clipRect);
				M(b.data, function(h) {
					g = h.tracker;
					c = h.trackerArgs || h.shapeArgs || {};
					delete c.strokeWidth;
					if (h.y !== null)
						if (g)
							g.attr(c);
						else {
							if (h.link !== void 0)
								var w = {
									cursor : "pointer",
									_cursor : "hand"
								};
							h.tracker = d[h.shapeType](c).attr({
										isTracker : j,
										fill : Gb,
										visibility : b.visible ? gb : V,
										zIndex : e.zIndex || 1
									}).on(da ? "touchstart" : "mouseover",
									function(d) {
										p = d.relatedTarget || d.fromElement;
										if (a.hoverSeries !== b
												&& f(p, "isTracker") !== j)
											b.onMouseOver();
										h.onMouseOver()
									}).on("mouseout", function(a) {
								if (!e.stickyTracking
										&& (p = a.relatedTarget || a.toElement, f(
												p, "isTracker") !== j))
									b.onMouseOut()
							}).css(w).add(h.group || a.trackerGroup)
						}
				})
			},
			animate : function(b) {
				var a = this, d = a.data;
				if (!b)
					M(d, function(b) {
								var d = b.graphic, b = b.shapeArgs;
								d && (d.attr({
											height : 0,
											y : a.yAxis
													.getThreshold(a.options.threshold
															|| 0)
										}), d.animate({
											height : b.height,
											y : b.y
										}, a.options.animation))
							}), a.animate = null
			},
			remove : function() {
				var b = this, a = b.chart;
				a.hasRendered && M(a.series, function(a) {
							if (a.type === b.type)
								a.isDirty = !0
						});
				nb.prototype.remove.apply(b, arguments)
			}
		});
		Fa.column = dc;
		ea = q(dc, {
					type : "bar",
					init : function(b) {
						b.inverted = this.inverted = !0;
						dc.prototype.init.apply(this, arguments)
					}
				});
		Fa.bar = ea;
		ea = q(nb, {
					type : "scatter",
					translate : function() {
						var b = this;
						nb.prototype.translate.apply(b);
						M(b.data, function(a) {
									a.shapeType = "circle";
									a.shapeArgs = {
										x : a.plotX,
										y : a.plotY,
										r : b.chart.options.tooltip.snap
									}
								})
					},
					drawTracker : function() {
						var b = this, a;
						M(b.data, function(d) {
									if (d.link !== void 0)
										var c = {
											cursor : "pointer",
											_cursor : "hand"
										};
									(a = d.graphic) && a.attr({
												isTracker : !0
											}).on("mouseover", function() {
												b.onMouseOver();
												d.onMouseOver()
											}).on("mouseout", function() {
												if (!b.options.stickyTracking)
													b.onMouseOut()
											}).css(c)
								})
					},
					cleanData : function() {
					}
				});
		Fa.scatter = ea;
		var ea = q(cc, {
			init : function() {
				cc.prototype.init.apply(this, arguments);
				var b = this, a;
				h(b, {
							visible : b.visible !== !1,
							name : o(b.name, "Slice")
						});
				!b.link && !b.doNotSlice && za(b, "click", function() {
							b.series && b.series.rotationStartInstanceAngle
									? delete b.series.rotationStartInstanceAngle
									: b.slice()
						});
				return b
			},
			setVisible : function(b) {
				var a = this.series.chart, d = this.tracker, c = this.dataLabel, g = this.connector, j = this.shadowGroup, e;
				e = (this.visible = b = b === C ? !this.visible : b)
						? "show"
						: "hide";
				this.group[e]();
				if (d)
					d[e]();
				if (c)
					c[e]();
				if (g)
					g[e]();
				if (j)
					j[e]();
				this.legendItem && a.legend.colorizeItem(this, b)
			},
			labelPrevX : 0,
			slice : function(b, d, c) {
				var g = this.series, j = g.chart, e = this.slicedTranslation;
				kb(c, j);
				o(d, !0);
				b = this.sliced = a(b) ? b : !this.sliced;
				d = {
					hcJSON : {
						series : []
					}
				};
				d.hcJSON.series[g.index] = {
					data : []
				};
				d.hcJSON.series[g.index].data[this.index] = {
					sliced : b || !1
				};
				ec(j.options.instanceAPI.chartInstance.jsVars._reflowData, d,
						!0);
				d = {
					translateX : b ? e[0] : j.plotLeft,
					translateY : b ? e[1] : j.plotTop
				};
				g.pie3DManager ? this.graphic.animate(d) : this.group
						.animate(d);
				this.shadowGroup && this.shadowGroup.animate(d);
				g = e[0] - j.plotLeft;
				j = e[1] - j.plotTop;
				this.connectorPath
						&& (this.connectorPath[1] += b ? g : -g, this.connectorPath[2] += b
								? j
								: -j, this.connectorPath[4] += b ? g : -g, this.connectorPath[6] += b
								? g
								: -g, this.connector.animate({
									d : this.connectorPath
								}));
				this.dataLabel && this.dataLabel._x
						&& (this.dataLabel.animate({
									x : b
											? this.dataLabel._x + g
											: this.dataLabel._x
								}), this.dataLabel.textBoundWrapper
								&& this.dataLabel.textBoundWrapper.animate({
									x : this.dataLabel.textBoundWrapper.x
											- (this.dataLabel.x - this.dataLabel._x)
											+ (b ? g : -g)
								}))
			}
		}), rc = function(b, a) {
			return Kb(b[1]
							- (this.pageY || this.originalEvent
									&& this.originalEvent.pageY) + a.top, b[0]
							- (this.pageX || this.originalEvent
									&& this.originalEvent.pageX) + a.left)
		}, ea = q(nb, {
			type : "pie",
			isCartesian : !1,
			pointClass : ea,
			pointAttrToOptions : {
				stroke : "borderColor",
				"stroke-width" : "borderWidth",
				fill : "color"
			},
			getColor : function() {
				this.initialColor = this.chart.counters.color
			},
			animate : function() {
				var b = this;
				M(b.data, function(a) {
							var d = a.graphic, a = a.shapeArgs, c = 2 * qb;
							d && (d.attr({
										start : c,
										end : c
									}), d.animate({
										r : a.r,
										start : a.start,
										end : a.end
									}, b.options.animation))
						});
				b.animate = null
			},
			rotate : function(b) {
				var a = this.data, d = this.options.slicedOffset, c = this.chart.plotLeft, g = this.chart.plotTop, j = O(
						this.chart.options.chart.startingAngle, 0), e;
				e = (b - j) % 360;
				this.chart.options.chart.startingAngle = O(b,
						this.chart.options.chart.startingAngle)
						% 360;
				e = e * qb / 180;
				ec(
						this.chart.options.instanceAPI.chartInstance.jsVars._reflowData,
						{
							hcJSON : {
								chart : {
									startingAngle : this.chart.options.chart.startingAngle
								}
							}
						}, !0);
				M(a, function(b) {
					var a = b.graphic, j = b.shadowGroup, k = b.tracker, p = b.shapeArgs, f = {
						start : p.start += e,
						end : p.end += e
					}, h = b.centerAngle = (f.start + f.end) / 2 % Pb, w = b.sliced, s = p.r
							* 0.7, n;
					b.slicedTranslation = hc([Ea(h) * d + c, P(h) * d + g], R);
					n = {
						translateX : b.slicedTranslation[0],
						translateY : b.slicedTranslation[1]
					};
					b.tooltipPos = [p.x + Ea(h) * s, p.y + P(h) * s];
					k && k.attr(f);
					a && (a.attr(f), w && b.group.attr(n));
					j && w && b.shadowGroup.attr(n)
				});
				this.drawDataLabels(!0)
			},
			translate : function() {
				var b = 0, a = this, d = a.options, c = -1
						* (E(this.chart.options.chart.startingAngle, 0) % 360 / 360), g = O(
						d.dataLabels.distance, 20), j = d.slicedOffset, e = j
						+ d.borderWidth, p = d.center, f = a.chart, h = f.plotWidth, w = f.plotHeight, s, n, l, r = a.data, v = 2
						* qb, X, m = pb(h, w), q, t, da, o = d.dataLabels.distance;
				p.push(d.size, d.innerSize || 0);
				p = hc(p, function(b, a) {
							return (q = /%$/.test(b)) ? [h, w, m, m][a] * K(b)
									/ 100 : b
						});
				a.getX = function(b, a) {
					l = ga.asin((b - p[1]) / (p[2] / 2 + o));
					return p[0] + (a ? -1 : 1) * Ea(l) * (p[2] / 2 + o)
				};
				a.center = p;
				M(r, function(a) {
							b += a.y
						});
				a.labelsRadius = p[2] / 2 + g;
				a.quadrantHeight = w / 2;
				a.quadrantWidth = h / 2;
				g = d.dataLabels;
				d = O(parseInt(g.style.fontSize, 10), 10) + 4;
				a.maxLabels = Math.floor(a.quadrantHeight / d);
				a.labelFontSize = d;
				a.connectorPadding = O(g.connectorPadding, 5);
				a.isSmartLineSlanted = E(g.isSmartLineSlanted, !0);
				a.connectorWidth = O(g.connectorWidth, 1);
				a.enableSmartLabels = g.enableSmartLabels;
				M(r, function(d) {
					X = b ? d.y / b : 0;
					s = R(c * v * 1E3) / 1E3;
					c += X;
					n = R(c * v * 1E3) / 1E3;
					d.shapeType = "arc";
					d.shapeArgs = {
						x : p[0],
						y : p[1],
						r : p[2] / 2,
						innerR : p[3] / 2,
						start : s,
						end : n
					};
					if (d.color.FCcolor
							&& d.color.FCcolor.gradientUnits !== "objectBoundingBox")
						d.color.FCcolor.cx = p[0], d.color.FCcolor.cy = p[1], d.color.FCcolor.r = p[2]
								/ 2;
					d.centerAngle = l = (n + s) / 2 % Pb;
					d.slicedTranslation = hc([Ea(l) * j + f.plotLeft,
									P(l) * j + f.plotTop], R);
					t = Ea(l) * p[2] / 2;
					a.radiusY = da = P(l) * p[2] / 2;
					d.tooltipPos = [p[0] + t * 0.7, p[1] + da * 0.7];
					d.labelPos = [p[0] + t + Ea(l) * o, p[1] + da + P(l) * o,
							p[0] + t + Ea(l) * e, p[1] + da + P(l) * e,
							p[0] + t, p[1] + da,
							o < 0 ? "center" : l < v / 4 ? "left" : "right", l];
					d.percentage = X * 100;
					d.total = b
				});
				this.setTooltipPoints()
			},
			render : function() {
				this.drawPoints();
				this.options.enableMouseTracking !== !1 && this.drawTracker();
				this.drawDataLabels();
				this.options.animation && this.animate && this.animate();
				this.isDirty = !1
			},
			drawPoints : function() {
				var b = this.chart, a = b.renderer, d, c, g, j = this.options.shadow, e, p;
				M(this.data, function(f) {
							c = f.graphic;
							p = f.shapeArgs;
							g = f.group;
							e = f.shadowGroup;
							if (j && !e)
								e = f.shadowGroup = a.g("shadow").attr({
											zIndex : 4
										}).add();
							if (!g)
								g = f.group = a.g("point").attr({
											zIndex : 5
										}).add();
							d = f.sliced ? f.slicedTranslation : [b.plotLeft,
									b.plotTop];
							g.translate(d[0], d[1]);
							e && e.translate(d[0], d[1]);
							c ? c.animate(p) : f.graphic = a.arc(p).attr(h(
									f.pointAttr[Ba], {
										"stroke-linejoin" : "round",
										dashstyle : f.dashStyle
									})).add(f.group).shadow(j, e, f.shadow);
							f.visible === !1 && f.setVisible(!1)
						})
			},
			drawDataLabels : function() {
				var b = function(b, a) {
					return b.point.y - a.point.y
				}, a = function(b, a) {
					return b.angle - a.angle
				}, d = ["left", "left", "right", "right"], c = [-1, 1, 1, -1], g = [
						1, 1, -1, -1];
				return function(j) {
					var e = this.data, p, f, h = this.chart, w = h.options.instanceAPI.smartLabel, s = this.options.dataLabels;
					p = s.style;
					var n = O(parseInt(p.lineHeight, 10), 12), l = s.placeInside, r = s.skipOverlapLabels, v = s.manageLabelOverflow, X = this.connectorPadding, m = this.connectorWidth, q, t, da = s.distance;
					o(s.softConnector, !0);
					var da = da > 0, C = this.center, sa = C[1], xa = C[0], C = C[2]
							/ 2, ua = [[], [], [], []], G, L = h.plotLeft, J = h.plotTop, h = h.plotSizeX, ba, Sa, B, A, Ja, S, F, T, D = this.labelsRadius, y = this.labelFontSize, z = y, E = z
							/ 2, X = [X, X, -X, -X], Q = this.maxLabels, aa = this.isSmartLineSlanted, ea = this.enableSmartLabels, W, Y;
					j
							|| (nb.prototype.drawDataLabels.apply(this), w
									.setStyle(p));
					if (e.length == 1) {
						if (p = e[0], Y = p.dataLabel, p.slicedTranslation = [
								L, J], Y)
							Y.attr({
										visibility : gb,
										align : "center",
										x : xa,
										y : sa + E - 2
									}), Y.x = xa
					} else if (l) {
						var w = O(this.center[3], 0) / 2, N = w + (C - w) / 2;
						M(e, function(b) {
							if (Y = b.dataLabel) {
								var a = b.centerAngle;
								F = sa + N * P(a) + E - 2;
								A = xa + N * Ea(a);
								Y.x = A;
								Y._x = A;
								Y.y = F;
								if (b.sliced)
									b = b.slicedTranslation, a = b[1] - J, A += b[0]
											- L, F += a;
								Y.attr({
											visibility : gb,
											align : "center",
											x : A,
											y : F
										});
								Y.textBound()
							}
						})
					} else {
						M(e, function(b) {
									if (Y = b.dataLabel) {
										var a = b.centerAngle;
										a < 0 && (a = Pb + a);
										ua[a < Ob ? 1 : a < qb ? 2 : a < Vb
												? 3
												: 0].push({
													point : b,
													angle : a
												})
									}
								});
						for (j = e = 4; j--;) {
							if (r && (p = ua[j].length - Q, p > 0)) {
								ua[j].sort(b);
								T = ua[j].splice(0, p);
								l = 0;
								for (B = T.length; l < B; l += 1)
									p = T[l].point, p.dataLabel.attr({
												visibility : V
											}), p.connector
											&& p.connector.attr({
														visibility : V
													})
							}
							ua[j].sort(a)
						}
						j = ca(ua[0].length, ua[1].length, ua[2].length,
								ua[3].length);
						W = ca(pb(j, Q) * z, D);
						ua[1].reverse();
						for (ua[3].reverse(); e--;) {
							T = ua[e];
							B = T.length;
							r || (z = B > Q ? W / B : y, E = z / 2);
							p = B * z - E;
							l = W + E;
							for (j = 0; j < B; j += 1, p -= z)
								t = Da(W * P(T[j].angle)), l - t < z ? t = l
										- z : t < p && (t = p), l = T[j].oriY = t;
							G = d[e];
							B = W - B * z + E;
							l = -E;
							for (j = T.length - 1; j >= 0; j -= 1, B += z) {
								p = T[j].point;
								f = T[j].angle;
								q = p.sliced;
								Y = p.dataLabel;
								t = Da(W * P(f));
								t - l < z ? t = l + z : t > B && (t = B);
								l = t;
								Ja = (t + T[j].oriY) / 2;
								t = xa + g[e] * D * Ea(ga.asin(Ja / W));
								Ja *= c[e];
								Ja += sa;
								S = sa + C * P(f);
								f = xa + C * Ea(f);
								A = t + X[e];
								F = Ja + E - 2;
								Y.x = A;
								Y._x = A;
								if (v)
									ba = e > 1 ? A : h - A, Sa = Y._str = Y._str
											|| Y.textStr
											|| Y.element
											&& Y.element.innerHTML, Y.attr({
												text : w
														.getSmartText(Sa, ba, n).text
											});
								Y.y = F;
								if (q)
									ba = p.slicedTranslation, q = ba[0] - L, ba = ba[1]
											- J, A += q, t += q, f += q, S += ba;
								Y.attr({
											visibility : gb,
											align : G,
											x : A,
											y : F
										});
								Y.textBound();
								if (da && m && ea)
									q = p.connector, p.connectorPath = t = [Aa,
											f, S, ra, aa ? t : f, Ja, A, Ja], q
											? (q.attr({
														d : t
													}), q
													.attr("visibility", gb))
											: p.connector = q = this.chart.renderer
													.path(t).attr({
														"stroke-width" : m,
														stroke : s.connectorColor
																|| "#606060",
														visibility : gb,
														zIndex : 3
													}).translate(L, J).add()
							}
						}
					}
				}
			}(),
			drawTracker : function() {
				var b = this, a, d = [b.center[0] + b.chart.plotLeft,
						b.center[1] + b.chart.plotTop], c, g = b.options.enableRotation, j;
				g && (j = function(a) {
					c = l(b.chart.container);
					b.rotationStartInstanceAngle = rc.call(a, d, c)
							- b.chart.options.chart.startingAngle * Cb;
					b.chart.tooltip
							&& (a.type === "dragstart"
									? b.chart.tooltip.block(!0)
									: (b.chart.tooltip.block(!1), b.chart.tooltip
											.refresh(a.data, !0)))
				});
				dc.prototype.drawTracker.apply(this, arguments);
				M(b.data, function(e) {
					if (e.y === null || !(a = e.tracker) || a.canRotate === !0)
						return !0;
					g
							&& (za(a.element, "dragstart dragend", j, e), za(
									a.element, "drag", function(a) {
										b
												.rotate((rc.call(a, d, c) - b.rotationStartInstanceAngle)
														/ Cb)
									}))
				})
			},
			getSymbol : function() {
			}
		});
		Fa.pie = ea;
		Q = Q.Highcharts = {
			Chart : vb,
			dateFormat : sa,
			pathAnim : Sa,
			getOptions : function() {
				return r
			},
			hasRtlBug : w,
			numberFormat : ma,
			Point : cc,
			Color : ob,
			Renderer : s,
			seriesTypes : Fa,
			setOptions : function(b) {
				r = ia(r, b);
				Ha = r.plotOptions;
				$();
				return r
			},
			Series : nb,
			addEvent : za,
			removeEvent : ya,
			getTouchEvent : ac,
			createElement : J,
			discardElement : ha,
			css : A,
			each : M,
			extend : h,
			attr : f,
			map : hc,
			merge : ia,
			pick : o,
			extendClass : q,
			product : "Highcharts",
			version : "2.1.9",
			hasTouch : da,
			hasSVG : g,
			isIE : d,
			getPosition : l,
			CnbiSoftModified : "3.2.3"
		};
		Ha.floatedcolumn = ia(Ha.column, {
					states : {
						hover : {}
					}
				});
		w = Q.extendClass(Fa.column, {
			type : "floatedcolumn",
			translate : function() {
				var b = this, d = b.chart, c = 0, g = b.xAxis.reversed, j = b.xAxis.categories, e = {}, p, f, w, s;
				nb.prototype.translate.apply(b);
				M(d.series, function(a) {
					if (a.type == b.type)
						a.options.stacking ? (p = a.stackKey, e[p] === C
								&& (e[p] = c++), s = e[p]) : s = c++, a.columnIndex = s
				});
				var n = b.options, l = b.data, r = b.closestPoints, j = Da(l[1]
						? l[r].plotX - l[r - 1].plotX
						: d.plotSizeX / (j ? j.length : 1)), r = j
						* n.groupPadding, v = (j - 2 * r) / c, X = n.pointWidth, m = a(X)
						? (v - X) / 2
						: v * n.pointPadding, q = ca(o(X, v - 2 * m), 1), t = m
						+ (r + ((g ? c - b.columnIndex : b.columnIndex) || 0)
								* v - j / 2) * (g ? -1 : 1), g = n.threshold
						|| 0, da = b.xAxis, j = b.yAxis, sa = da.getExtremes(), ua = j
						.getExtremes(), xa = b.yAxis.getThreshold(g), G = o(
						n.minPointLength, 5);
				M(l, function(c) {
					var g = c.plotY, j = c.yBottom || xa, e = c.plotX + t, p = Qb(pb(
							g, j)), s = Qb(ca(g, j) - p), u, l;
					c._FCX !== void 0 && (e = da.translate(c._FCX, 0, 0, 0, 1));
					c._FCY !== void 0
							&& (p = b.yAxis.translate(c._FCY, 0, 1, 0, 1));
					c._FCH !== void 0
							&& (s = R(c._FCH
									* Math.abs(d.plotSizeY / (ua.max - ua.min))
									* 100)
									/ 100);
					l = c._FCW !== void 0 ? R(c._FCW
							* Math.abs(d.plotSizeX / (sa.max - sa.min)) * 100)
							/ 100 : q;
					Da(s) < G
							&& (G
									&& (s = G, p = Da(p - xa) > G ? j - G : xa
											- (g <= xa ? G : 0)), u = p - 3);
					h(c, {
								barX : e,
								barY : p,
								barW : l,
								barH : s
							});
					c.shapeType = "rect";
					c.shapeArgs = {
						x : e,
						y : p,
						width : l,
						height : s,
						r : n.borderRadius
					};
					f = e + l / 2 + 15;
					w = p - 15;
					c.tooltipPos = [f < 0 ? 0 : f, w < 0 ? 0 : w];
					c.trackerArgs = a(u) && ia(c.shapeArgs, {
								height : ca(6, s + 3),
								y : u
							})
				})
			}
		});
		Fa.floatedcolumn = w;
		Ha.ssgrid = ia(Ha.pie, {
					states : {
						hover : {}
					}
				});
		var Qc = function(b, a) {
			var d = b.currentSeriesIndex, c = b.series, g = a ? d - 1 : d + 1;
			if (c[g])
				c[d].hide(), c[g].show(), b.currentSeriesIndex = g, Cc(b)
		}, Cc = function(b) {
			var a = b.series.length, d = b.currentSeriesIndex, c = b.naviigator;
			c.translate(0, b.series[d].data.length * b.options.chart.rowHeight);
			d === 0 ? c.navElePrv.hide() : c.navElePrv.show();
			d === a - 1 ? c.navEleNxt.hide() : c.navEleNxt.show()
		}, Uc = function(b) {
			var a = b.renderer, d = b.options.chart, c = d.navButtonRadius, g = c
					* 0.67, j = d.navButtonPadding + g, e = d.width - 20, p = d.navButtonHoverColor, f = d.navButtonColor, h, w;
			if (b.series.length > 1) {
				var s = b.naviigator = a.g("navigator").attr({
							zIndex : 4
						}).add();
				s.navElePrv = d = a.g("navElePrv").add(s);
				h = a.path([Aa, 20, j, ra, 20 + c + g, j - g, 20 + c, j,
						20 + c + g, j + g, "Z"]).attr({
							fill : f
						}).add(d);
				a.circle(20 + c, j, c).attr({
							fill : Ub,
							cursor : "pointer"
						}).on("mouseover", function() {
							h.attr({
										fill : p,
										cursor : "pointer"
									})
						}).on("mouseout", function() {
							h.attr({
										fill : f
									})
						}).on("click", function() {
							Qc(b, !0)
						}).add(d);
				s.navEleNxt = d = a.g("navEleNxt").add(s);
				w = a.path([Aa, e, j, ra, e - c - g, j - g, e - c, j,
						e - c - g, j + g, "Z"]).attr({
							fill : f,
							cursor : "pointer"
						}).add(d);
				a.circle(e - c, j, c).attr({
							fill : Ub,
							cursor : "pointer"
						}).on("mouseover", function() {
							w.attr({
										fill : p
									})
						}).on("mouseout", function() {
							w.attr({
										fill : f
									})
						}).on("click", function() {
							Qc(b)
						}).attr({
							fill : f
						}).add(d)
			}
		}, w = Q.extendClass(Fa.pie, {
			type : "ssgrid",
			translate : function() {
				var b = this.chart.options.chart, a = 0, d = b.width, c = b.rowHeight, g = b.colorBoxWidth, j = b.colorBoxHeight, e = b.colorBoxX, p = b.labelX, f = b.valueX;
				M(this.data, function(b) {
							b.shapeType = "rect";
							b.alternateGradientBox = {
								x : 0,
								y : a,
								width : d,
								height : c,
								r : 0
							};
							b.rowDivider = [Aa, 0, a, ra, d, a];
							b.colorBoxArgs = {
								x : e,
								y : a + c / 2 - j / 2,
								width : g,
								height : j,
								r : 0
							};
							b.labelX = p;
							b.valueX = f;
							a += c
						});
				this.options.lastRowDivider = [Aa, 0, a, ra, d, a]
			},
			drawPoints : function() {
				var b = this.chart.options.chart, a = this.chart.renderer, d, c = this.group, g = b.alternateRowColor, j = b.listRowDividerAttr, e = this.options.lastRowDivider, p = b.rowHeight, f = b.textStyle, h = b.lineHeight, w = b.width, s = b.valueColumnPadding, n, l, r, v, X, m, q;
				M(this.data, function(b, e) {
					d = b.graphic;
					n = b.rowDivider;
					l = b.colorBoxArgs;
					r = b.alternateGradientBox;
					m = b.valueX;
					if (!d)
						b.graphic = a.path(n).attr(j).add(c), e % 2 == 0
								&& a.rect(r).attr({
											fill : g,
											"stroke-width" : 0
										}).add(c), b.symbol = a.rect(l).attr({
									fill : b.color,
									"stroke-width" : 0,
									stroke : "#000000"
								}).add(c), v = a.text(b.label, b.labelX).css(f)
								.add(c), X = n[2] + p / 2 + h
								- v.getBBox().height / 2, v.attr({
									y : X
								}), v = a.text(b.displayValue, m).css(f).add(c), q = v
								.getBBox(), X = n[2] + p / 2 + h - q.height / 2, v
								.attr({
											y : X,
											x : m + (w - m - s - q.width)
										})
				});
				a.path(e).attr(j).add(c)
			},
			render : function() {
				var k;
				var b, a = this.chart;
				b = a.renderer;
				var d = this.options;
				a.naviigator || Uc(a);
				if (!this.group)
					k = this.group = b.g("series"), b = k, b.attr({
								visibility : this.visible ? gb : V,
								zIndex : d.zIndex
							}).translate(a.plotLeft, a.plotTop)
							.add(a.seriesGroup);
				this.drawPoints();
				this.drawDataLabels();
				if (this.visible)
					a.currentSeriesIndex = this.index, a.naviigator && Cc(a);
				this.options.animation && this.animate && this.animate();
				this.isDirty = !1
			},
			drawDataLabels : function() {
			},
			drawTracker : function() {
			},
			animate : function() {
			}
		});
		Fa.ssgrid = w;
		var Vc = function() {
			var b = this.radarAxis, a = b.catLength, d = this.renderer, c, g = this.plotWidth
					/ 2, j = this.plotHeight / 2, e = b.radius, p = b.xAxis;
			c = b.yAxis;
			var f = c.plotLines, h = p.plotLines, w = c.min, s = b.xTrans, n = b.startAngle, l = [], r = [Aa], v = [], X = f.length, m = b.yTrans, q, t, da, o, C, sa, xa = ga.PI
					* 2, ua = ga.PI / 2, G = ga.PI + ua, M = ["right",
					"center", "left"], L = e + 10, J = c.labels, A, B = d
					.g("axis");
			B.attr({
						zIndex : 2,
						width : this.plotWidth,
						height : this.plotHeight
					}).translate(this.plotLeft, this.plotTop).add();
			b.divline = [];
			for (t = 0; t < X; t += 1) {
				v[t] = [Aa];
				q = !0;
				c = a;
				A = f[t];
				for (sa = A.value; c--;) {
					C = Da(sa - w) * m;
					da = g + C * Ea(-(n + c * s));
					o = j + C * P(-(n + c * s));
					v[t].splice(v[t].length, 0, da, o);
					if (c == 0 && A.label)
						J = A.label, ((C = J.text) || C === 0)
								&& d.text(C, da, o).attr({
											align : J.textAlign,
											rotation : J.rotation
										}).css(J.style).add(B);
					q && (v[t].push(ra), q = !1)
				}
				v[t].push("Z");
				b.divline[t] = d.path(v[t]).attr({
							zIndex : 2,
							stroke : A.color,
							"stroke-width" : A.width
						}).add(B)
			}
			q = !0;
			for (c = h.length; c--;)
				if (A = h[c], sa = A.value, a = n + sa * s, f = a % xa, da = g
						+ e * Ea(-a), o = j + e * P(-a), l.splice(l.length, 0,
						Aa, g, j, ra, da, o), r.splice(r.length, 0, da, o), q
						&& (r.push(ra), q = !1), A.label
						&& (J = A.label, (C = J.text) || C === 0))
					da = f > ua && f < G ? 0 : f == ua || f == G ? 1 : 2, d
							.text(C, g + L * Ea(-a), j + L * P(-a)).attr({
										align : M[da],
										rotation : J.rotation
									}).css(J.style).add(B);
			r.push("Z");
			b.spikeGraph = d.path(l).attr({
						zIndex : 1,
						stroke : p.gridLineColor,
						"stroke-width" : E(p.gridLineWidth, 1)
					}).add(B);
			if (p.showRadarBorder)
				b.borderGraph = d.path(r).attr({
							stroke : p.radarBorderColor,
							"stroke-width" : E(p.radarBorderThickness, 2),
							fill : p.radarFillColor
						}).add(B)
		};
		Ha.radar = ia(Ha.area, {
					states : {
						hover : {}
					}
				});
		w = Q.extendClass(Fa.pie, {
			type : "radar",
			isCartesian : !1,
			pointClass : Fa.area.prototype.pointClass,
			pointAttrToOptions : Fa.area.prototype.pointAttrToOptions,
			translate : function() {
				var b = this.chart, d = this.data, c = d.length, g, j, e, p, f, h, w;
				if (typeof b.radarAxis === "undefined") {
					h = b.plotWidth / 2;
					w = b.plotHeight / 2;
					g = b.options;
					var s = g.xAxis, n = s.max - s.min + 1, l = g.yAxis instanceof Array
							? g.yAxis[0]
							: g.yAxis, r = a(g.chart.axisRadius)
							? g.chart.axisRadius
							: pb(h, w);
					r < 0 && (r = pb(h, w));
					j = l.min;
					e = Da(l.max - j);
					p = r / e;
					g = 2 * ga.PI / n;
					f = ga.PI / 2;
					b.radarAxis = {};
					b.radarAxis.yTrans = p;
					b.radarAxis.xTrans = g;
					b.radarAxis.yRange = e;
					b.radarAxis.startAngle = f;
					b.radarAxis.yMin = j;
					b.radarAxis.centerX = h;
					b.radarAxis.centerY = w;
					b.radarAxis.radius = r;
					b.radarAxis.categories = [];
					b.radarAxis.catLength = n;
					b.radarAxis.yAxis = l;
					b.radarAxis.xAxis = s
				} else
					h = b.radarAxis.centerX, p = b.radarAxis.yTrans, j = b.radarAxis.yMin, f = b.radarAxis.startAngle, g = b.radarAxis.xTrans, w = b.radarAxis.centerY;
				for (; c--;)
					b = d[c], s = a(b.y) ? b.y : j, b.plotX = h + p * Da(s - j)
							* Ea(-(f + c * g)), b.plotY = w + p * Da(s - j)
							* P(-(f + c * g)), b.clientX = b.plotX
			},
			drawGraph : function() {
				var b = this.options, a = this.chart, d = this.graph, c = [], g = this.group, j = this.color, e = b.lineWidth, p = b.lineColor
						|| j, b = o(b.fillColor, ob(j).setOpacity(b.fillOpacity
								|| 0.5).get()), f, a = a.renderer, j = [];
				this.data.length > 1 ? (f = [], M(this.data, function(b, a) {
							a < 2 && f.push([Aa, ra][a]);
							f.push(b.plotX, b.plotY)
						}), f.push("Z"), c = c.concat(f)) : j
						.push(this.segment[0][0]);
				this.graphPath = c;
				this.singlePoints = j;
				d ? d.attr({
							d : c
						}) : this.graph = a.path(c).attr({
							stroke : p,
							fill : b,
							"stroke-width" : e + S
						}).add(g).shadow()
			},
			drawTracker : function() {
				var b = this, a = b.options.cursor, d = a && {
					cursor : a
				}, c;
				M(b.data, function(a) {
							(c = a.graphic) && c.attr({
										isTracker : !0
									}).on("mouseover", function() {
										b.onMouseOver();
										a.onMouseOver()
									}).on("mouseout", function() {
										if (!b.options.stickyTracking)
											b.onMouseOut()
									}).css(d)
						})
			},
			setVisible : function(b, a) {
				var d = this.chart, c = this.legendItem, g = this.group, j = this.dataLabelsGroup, e = this.shadowGroup, p, f = this.data, h = d.options.chart.ignoreHiddenSeries;
				p = this.visible;
				p = (this.visible = b = b === C ? !p : b) ? "show" : "hide";
				if (g)
					g[p]();
				if (e && e.floated)
					e[p]();
				for (g = f.length; g--;)
					if (e = f[g], e.graphic)
						e.graphic[p]();
				if (j)
					j[p]();
				c && d.legend.colorizeItem(this, b);
				this.isDirty = !0;
				this.options.stacking && M(d.series, function(b) {
							if (b.options.stacking && b.visible)
								b.isDirty = !0
						});
				if (h)
					d.isDirtyBox = !0;
				a !== !1 && d.redraw();
				Ia(this, p)
			},
			getColor : Fa.area.prototype.getColor,
			drawDataLabels : Fa.area.prototype.drawDataLabels,
			animate : function() {
			},
			getSymbol : Fa.area.prototype.getSymbol,
			drawPoints : function() {
				var b, a = this.data, d = this.chart, c, g, j, e, p, f;
				if (this.options.marker.enabled)
					for (j = a.length; j--;)
						if (e = a[j], c = e.plotX, g = e.plotY, f = e.graphic, g !== C
								&& !isNaN(g))
							b = e.pointAttr[e.selected ? "select" : Ba], p = b.r, f
									? f.animate({
												x : c,
												y : g,
												r : p
											})
									: e.graphic = d.renderer.symbol(
											o(e.marker && e.marker.symbol,
													this.symbol), c, g, p)
											.attr(b).add(d.trackerGroup
													|| this.group)
			},
			rotate : function() {
			},
			render : function() {
				var b = this, a = b.chart, d, c = b.options.animation, g = c
						&& b.animate, c = g ? c && c.duration || 500 : 0, j, e, p, f, h = a.renderer, w = b.clipRect;
				if (!w
						&& (j = -a.plotLeft, e = -a.plotTop, p = a.chartWidth, f = a.chartHeight, w = b.clipRect = !a.hasRendered
								&& a.clipRect ? a.clipRect : h.clipRect(j, e,
								p, f), w.cliprectX = j, w.cliprectY = e, w.cliprectW = p, w.cliprectH = f, !a.clipRect))
					a.clipRect = b.clipRect;
				if (a.drawRadarAxis !== !0)
					Vc.call(a), a.drawRadarAxis = !0;
				if (!b.group)
					d = b.group = h.g("series"), a.inverted && d.attr({
								width : a.plotWidth,
								height : a.plotHeight
							}).invert(), d.clip(b.clipRect).attr({
								visibility : b.visible ? gb : V,
								zIndex : 3
							}).translate(a.plotLeft, a.plotTop)
							.add(a.seriesGroup);
				b.drawDataLabels();
				g && b.animate(!0);
				b.drawGraph && b.drawGraph();
				b.drawPoints();
				b.options.enableMouseTracking !== !1 && b.drawTracker();
				g && b.animate();
				setTimeout(function() {
							w.isAnimating = !1;
							if ((d = b.group) && w !== a.clipRect && w.renderer)
								d.clip(b.clipRect = a.clipRect), w.destroy()
						}, c);
				b.isDirty = !1
			}
		});
		Fa.radar = w;
		Ha.column3d = ia(Ha.column, {
					states : {
						hover : {}
					}
				});
		w = Q.extendClass(Fa.column, {
			type : "column3d",
			initGroup : function() {
				var b = this.chart, a = b.renderer, d = this.xDepth, c = this.yDepth, g, j, e, p, f, h = this.yAxis;
				if (!b.column3DGroups)
					f = b.column3DGroups = a.g("series-3d"), f.translate(
							b.plotLeft - d, b.plotTop + c).add(b.seriesGroup);
				if (h.options.min < 0 && h.options.max >= 0) {
					g = b.options.chart.zeroPlaneColor;
					j = b.options.chart.zeroPlaneBorderColor;
					e = 0;
					p = h.translate(0, 0, 1);
					var w = 1, s = b.plotSizeX;
					b.inverted
							&& (e = w, w = s, s = e, e = b.plotSizeY - p - s, p = 0);
					h.zeroPlane = a.rect3d(e, p, s, w, d, c, 1, "zeroPlane")
							.attr({
										fill : g,
										stroke : j,
										"stroke-width" : 1,
										zIndex : 2
									}).add(f)
				}
			},
			drawNthPoint : function(b) {
				var a = this.chart, d = a.column3DGroups, c = a.renderer, g = this.xDepth, j = this.yDepth, e = this.data[b], p, f;
				p = e.plotY;
				var h, w, s, n, l, r, v, X;
				if (p !== C && !isNaN(p)) {
					h = e.shapeArgs;
					w = e.color;
					X = e.borderColor;
					n = e.borderWidth;
					s = e.graphic;
					p = parseInt(h.x, 10);
					f = parseInt(h.y, 10);
					l = p;
					r = f;
					v = parseInt(h.height, 10);
					h = parseInt(h.width, 10);
					if (this.options.enableMouseTracking !== !1) {
						var m = p - g, q = f + j;
						e.trackerArgs = [Aa, m, q, ra, m, q + v, m + h, q + v,
								m + h + g, q + v - j, m + h + g, q - j, m + g,
								q - j, "Z"];
						this.drawTracker(b)
					}
					a.inverted
							&& (b = v, v = h, h = b, l = a.plotSizeY - f - h, r = a.plotSizeX
									- p - v);
					s ? c.attr({
								x : l,
								y : r,
								width : h,
								height : v,
								x3D : g,
								y3D : j,
								strokeWidth : n,
								fill : w,
								stroke : X,
								zIndex : e.y >= 0 ? 3 : 1
							}) : (e.graphic = c.rect3d(l, r, h, v, g, j, n,
							"point").attr({
								fill : w,
								stroke : X,
								zIndex : e.y >= 0 ? 3 : 1
							}).add(d), e.graphic.shadow(this.options.shadow,
							void 0, e.shadow))
				}
			},
			render : function() {
				var b = this.options.animation && this.animate;
				this.drawDataLabels();
				b && this.animate();
				this.isDirty = !1
			},
			animate : function(b) {
				var a = this, d = a.data, c = a.chart, g, j;
				if (!b)
					M(d, function(b) {
						var d = b.graphic;
						d
								&& (c.inverted ? (g = d.attr("width"), j = d
										.attr("x"), d.attr({
									x : c.plotSizeY
											- a.yAxis
													.getThreshold(a.options.threshold
															|| 0),
									width : 0
								}), d.animate({
											x : j,
											width : g
										}, a.options.animation))
										: (d.attr({
											height : 0,
											y : a.yAxis
													.getThreshold(a.options.threshold
															|| 0)
										}), d.animate({
													height : b.barH,
													y : b.barY
												}, a.options.animation)))
					}), a.animate = null
			},
			drawTracker : function(b) {
				var a = this, d = a.chart, c = d.renderer, g, j = +new Date, e = a.options.cursor, e = e
						&& {
							cursor : e
						}, p, h = a.data[b];
				g = h.tracker;
				d.options.chart.hasScroll && d.trackerGroup.clip(a.clipRect);
				b = h.trackerArgs || h.shapeArgs;
				if (h.y !== null)
					g ? g.attr(b) : (h.link !== void 0 && (e = {
						cursor : "pointer",
						_cursor : "hand"
					}), h.tracker = c.path(b).attr({
								isTracker : j,
								fill : Gb,
								visibility : a.visible ? gb : V,
								zIndex : h.y > 0 ? -1 : -3
							}).on(da ? "touchstart" : "mouseover", function(b) {
								p = b.relatedTarget || b.fromElement;
								if (d.hoverSeries != a
										&& f(p, "isTracker") != j)
									a.onMouseOver();
								h.onMouseOver()
							}).on("mouseout", function(b) {
						if (!a.options.stickyTracking
								&& (p = b.relatedTarget || b.toElement, f(p,
										"isTracker") != j))
							a.onMouseOut()
					}).css(e).add(d.trackerGroup))
			},
			setVisible : function(b, a) {
				var d = this.chart, c = this.legendItem, g = this.dataLabelsGroup, j, e, p = this.data, f, h = d.options.chart.ignoreHiddenSeries;
				j = this.visible;
				j = (this.visible = b = b === C ? !j : b) ? "show" : "hide";
				for (e = p.length; e--;) {
					f = p[e];
					if (f.tracker)
						f.tracker[j]();
					if (f.graphic)
						f.graphic[j]()
				}
				if (g)
					g[j]();
				c && d.legend.colorizeItem(this, b);
				this.isDirty = !0;
				this.options.stacking && M(d.series, function(b) {
							if (b.options.stacking && b.visible)
								b.isDirty = !0
						});
				if (h)
					d.isDirtyBox = !0;
				a !== !1 && d.redraw();
				Ia(this, j)
			}
		});
		Fa.column3d = w;
		Ha.bar3d = ia(Ha.bar, {
					states : {
						hover : {}
					}
				});
		w = Q.extendClass(w, {
					type : "bar3d",
					init : function(b) {
						b.inverted = this.inverted = !0;
						Fa.column.prototype.init.apply(this, arguments)
					}
				});
		Fa.bar3d = w;
		Ha.bubble = ia(Ha.scatter, {
					states : {
						hover : {}
					}
				});
		w = Q.extendClass(Fa.scatter, {
			type : "bubble",
			drawPoints : function() {
				var b, a = this.data, d = this.chart, c, g, j, e, p, f, h = this.chart.plotWidth;
				c = this.chart.plotHeight;
				b = this.options.zMax;
				var w = this.options.bubbleScale, s, h = (h > c ? c : h) / 8;
				s = Nb(b);
				if (this.options.marker.enabled)
					for (j = a.length; j--;)
						if (e = a[j], c = e.plotX, g = e.plotY, f = e.graphic, g !== C
								&& !isNaN(g))
							b = e.pointAttr[e.selected ? "select" : Ba], p = Nb(e.z), p = R(p
									* h / s)
									* w, b.r = p = p || 0, f ? f.animate({
										x : c,
										y : g,
										r : p
									}) : e.graphic = d.renderer
									.symbol(
											o(e.marker && e.marker.symbol,
													this.symbol), c, g, p)
									.attr(b).add(this.group)
			}
		});
		Fa.bubble = w;
		Ha.candlestick = ia(Ha.column, {
					states : {
						hover : {}
					}
				});
		w = Q.extendClass(Fa.column, {
			type : "candlestick",
			drawPoints : function() {
				var b = this, d = b.options, c = b.chart.renderer, g, j, e;
				M(b.data, function(p) {
					if (a(p.plotY))
						if (g = p.graphic, j = p.shapeArgs, g)
							g.attr(j);
						else {
							e = {
								stroke : p.borderColor,
								fill : p.color,
								"stroke-width" : p.borderWidth,
								"stroke-linecap" : "round",
								dashstyle : p.dashStyle
							};
							if (p.bar)
								p.bar.graphic = c[p.bar.shapeType](p.bar.shapeArgs)
										.attr(e).add(b.group).shadow(d.shadow,
												void 0, d.shadow);
							if (j)
								p.graphic = c[p.shapeType](j).attr(e)
										.add(b.group).shadow(d.shadow, void 0,
												d.shadow)
						}
				})
			},
			translate : function() {
				var b = this, d = b.chart, c = 0, g = b.xAxis.reversed, j = b.xAxis.categories, e, p = b.options.plotType;
				nb.prototype.translate.apply(b);
				M(d.series, function(d) {
							if (d.type == b.type)
								d.options.stacking
										? (a(e) || (e = c++), d.columnIndex = e)
										: d.columnIndex = c++
						});
				for (var f = b.options, w, s = b.data, n = b.closestPoints, j = Da(s[1]
						? s[n].plotX - s[n - 1].plotX
						: d.plotSizeX / (j && j.length ? j.length : 1)), n = j
						* f.groupPadding, l = (j - 2 * n) / c, d = f.pointWidth, r = a(d)
						? (l - d) / 2
						: l * f.pointPadding, d = o(d, l - 2 * r), n = r
						+ (n + ((g ? c - b.columnIndex : b.columnIndex) || 0)
								* l - j / 2) * (g ? -1 : 1), l = b.yAxis
						.getThreshold(f.threshold || 0), r = f.minPointLength, g = 0; g < s.length; g += 1)
					if (j = s[g], p == "line") {
						if (g > 0)
							w = s[g - 1], w.shapeType = "path", w.shapeArgs = [
									Aa, w.plotX, w.plotY, ra, j.plotX, j.plotY];
						j.trackerShapeType = "rect";
						j.trackerArgs = {
							x : j.plotX - 3,
							y : j.plotY - 3,
							width : 6,
							height : 6
						}
					} else {
						w = j.plotX + n;
						var v = j.plotY, X = b.yAxis.getThreshold(j.MY), m = Qb(pb(
								v, X)), q = Qb(Da(v - X)), t = d, da = t / 2, C;
						if (q < (r || 5))
							r && (q = r, m = l - (v <= l ? r : 0)), C = m - 3;
						q < 1 && (q = 1);
						h(j, {
									barX : w,
									barY : m,
									barW : t,
									barH : q
								});
						p == "bar"
								? (j.trackerShapeType = "rect", j.shapeType = "path", j.shapeArgs = [
										Aa, j.plotX, X, ra, j.plotX - da, X,
										Aa, j.plotX, v, ra, j.plotX + da, v], j.trackerArgs = {
									x : w,
									y : a(C) ? C : m,
									width : t,
									height : a(C) ? 6 : q
								})
								: (j.shapeType = "rect", j.shapeArgs = {
									x : w,
									y : m,
									width : t,
									height : q,
									r : f.borderRadius
								}, j.trackerShapeType = "rect", j.trackerArgs = a(C)
										&& ia(j.shapeArgs, {
													height : 6,
													y : C
												}));
						j.bar = {
							shapeType : "path",
							shapeArgs : [Aa, j.plotX,
									b.yAxis.getThreshold(parseFloat(j.high)),
									ra, j.plotX,
									b.yAxis.getThreshold(parseFloat(j.low))]
						}
					}
			},
			drawTracker : function() {
				var b = this, a = b.chart, d = a.renderer, c, j, g = +new Date, e;
				M(b.data, function(p) {
					j = p.tracker;
					c = p.trackerArgs;
					delete c.strokeWidth;
					if (p.y !== null)
						if (j)
							j.attr(c);
						else {
							if (p.link !== void 0)
								var h = {
									cursor : "pointer",
									_cursor : "hand"
								};
							p.tracker = d[p.trackerShapeType](c).attr({
										isTracker : g,
										fill : Gb,
										visibility : b.visible ? gb : V,
										zIndex : 1
									}).on(da ? "touchstart" : "mouseover",
									function(d) {
										e = d.relatedTarget || d.fromElement;
										if (a.hoverSeries !== b
												&& f(e, "isTracker") !== g)
											b.onMouseOver();
										p.onMouseOver()
									}).on("mouseout", function(a) {
								if (!b.options.stickyTracking
										&& (e = a.relatedTarget || a.toElement, f(
												e, "isTracker") !== g))
									b.onMouseOut()
							}).css(h).add(p.group || a.trackerGroup)
						}
				})
			}
		});
		Fa.candlestick = w;
		var jc = {};
		Ha.dragnode = ia(Ha.scatter, {
					states : {
						hover : {}
					}
				});
		Q = Q.extendClass(Fa.scatter, {
			type : "dragnode",
			drawPoints : function() {
				var b = this, a, d = b.data, c = b.chart, j, g, e, p, f, h, w, s, n, l, r, v, X = c.options.connectors, q = c.renderer, m = b.options.dataLabels.style, t, da, sa, ua, xa, G, A, J;
				if (b.options.marker.enabled) {
					for (p = d.length; p--;)
						if (f = d[p], j = f.options, g = f.plotX, e = f.plotY, w = f.graphic, r = f.marker, l = O(r
								&& r.height), n = O(r && r.width), h = O(r
								&& r.radius), v = E(r && r.symbol), s = f.id, t = j.imageNode, da = j.imageURL, sa = j.imageAlign, G = v == "square"
								? n
								: h * 1.5, ua = O(j.imageWidth, G), A = v == "square"
								? l
								: h * 1.5, j = O(j.imageHeight, A), J = E(r
								&& r.lineWidth), e !== C
								&& !isNaN(e)
								&& (a = f.pointAttr[f.selected ? "select" : Ba], a.r *= 1, h = a.r, w
										? w.animate({
													x : g,
													y : e,
													r : h
												})
										: (v = o(r && r.symbol, b.symbol), v == "square"
												? f.graphic = q.rect(g - n / 2,
														e - l / 2, n, l)
														.attr(a).add(b.group)
												: (v = v === "triangle"
														? "poly_3"
														: v, v = v === "diamond"
														? "poly_4"
														: v, f.graphic = q
														.symbol(v, g, e, h)
														.attr(a).add(b.group)), jc[s] = f), t
										&& da)) {
							switch (sa) {
								case "middle" :
									e -= j / 2;
									break;
								case "bottom" :
									e = A > j ? e - j + G / 2 : e - j / 2;
									break;
								default :
									e = A > j ? e - G / 2 : e - j / 2
							}
							xa || (xa = q.g("group").attr({
										visibility : V
									}).add());
							f.imageNodeGraph = q.image(da).attr({
										width : ua,
										height : j
									}).translate(g - ua / 2, e).css({
										opacity : 1
									}).add(b.group)
						}
					var L, B, ba, Sa, Ja, S, T, F, z, D, y, Y, Q, aa, W, ea, N, K;
					for (p = 0; p < X.length; p += 1)
						z || (z = q.g("connectors").attr({
									visibility : gb
								}).translate(c.plotLeft, c.plotTop).add()), M(
								X[p].connector, function(a) {
									L = a.from;
									B = a.to;
									ba = a.label;
									J = a.conStrength * a.stdThickness;
									D = a.color;
									ba = a.label;
									Q = jc[L];
									aa = jc[B];
									if (Q && aa) {
										Sa = Q.plotY;
										Ja = Q.plotX;
										T = aa.plotY;
										S = aa.plotX;
										W = Q.marker;
										ea = aa.marker;
										y = (Ja + S) / 2;
										Y = (Sa + T) / 2;
										F = [Aa, Ja, Sa, ra, S, T];
										b.connector = q.path(F).attr({
													"stroke-width" : J,
													stroke : D
												}).add(z);
										N = [];
										if (a.arrowAtStart)
											W.symbol == "square"
													? (h = W.width, H = W.height)
													: (h = W.radius, H = void 0), N = N
													.concat(Xa(Ja, Sa, S, T, h,
															H));
										if (a.arrowAtEnd)
											ea.symbol == "square"
													? (h = ea.width, H = ea.height)
													: (h = ea.radius, H = void 0), N = N
													.concat(Xa(S, T, Ja, Sa, h,
															H));
										N.length && q.path(N).attr({
													"stroke-width" : J,
													stroke : D
												}).add(z);
										K = D && D.FCcolor && D.FCcolor.color;
										f.connectorText = q.text(ba, y, Y)
												.attr({
															align : "center",
															rotation : 0
														}).css(m).css({
															backgroundColor : K,
															borderColor : K
														}).add(z).textBound()
									}
								})
				}
			}
		});
		Fa.dragnode = Q
	}
})();
CnbiSoft(["private", "modules.renderer.highcharts-export", function() {
	var y = document, h = window, K = Math.max, z = this.hcLib.Highcharts, t = z.Chart, Ta = z.createElement, e = z.discardElement, B = z.css, a = y.documentElement.ontouchstart !== void 0, f = z.extend, D = z.merge, o = z.each, A = z.addEvent, J = z
			.setOptions({
						lang : {
							downloadPNG : "Download PNG image",
							downloadJPEG : "Download JPEG image",
							downloadPDF : "Download PDF document",
							downloadSVG : "Download SVG vector image",
							exportButtonTitle : "Export to raster or vector image",
							printButtonTitle : "Print the chart"
						}
					});
	J.navigation = {
		menuStyle : {
			border : "1px solid #A0A0A0",
			background : "#FFFFFF"
		},
		menuItemStyle : {
			fontFamily : "Verdana, Arial",
			padding : "3px 5px",
			background : "none",
			color : "#303030",
			fontSize : a ? "14px" : "11px"
		},
		menuItemHoverStyle : {
			background : "#999999",
			color : "#FFFFFF"
		},
		_buttonOptions : {
			x : 11
		},
		buttonOptions : {
			align : "right",
			backgroundColor : {
				linearGradient : [0, 0, 0, 15],
				stops : [[0.4, "#F7F7F7"], [0.6, "#E3E3E3"]]
			},
			activeBackgroundColor : {
				linearGradient : [0, 0, 0, 15],
				stops : [[0.4, "#E3E3E3"], [0.6, "#F7F7F7"]]
			},
			borderColor : "#B0B0B0",
			borderRadius : 2,
			borderWidth : 1,
			height : 15,
			hoverBorderColor : "#909090",
			hoverSymbolFill : "#81A7CF",
			hoverSymbolStroke : "#4572A5",
			symbolFill : "#E0E0E0",
			symbolStroke : "#A0A0A0",
			symbolX : 8,
			symbolY : 7.5,
			verticalAlign : "top",
			width : 16,
			y : 10
		}
	};
	J.exporting = {
		type : "image/png",
		url : "http://export.highcharts.com/",
		width : 800,
		enableImages : !1,
		buttons : {
			exportButton : {
				symbol : "exportIcon",
				symbolFill : "#A8BF77",
				hoverSymbolFill : "#768F3E",
				_titleKey : "exportButtonTitle",
				tooltip : "Export Chart",
				menuItems : [{
							textKey : "downloadPNG",
							onclick : function() {
								this.exportChart()
							}
						}, {
							textKey : "downloadJPEG",
							onclick : function() {
								this.exportChart({
											type : "image/jpeg"
										})
							}
						}, {
							textKey : "downloadPDF",
							onclick : function() {
								this.exportChart({
											type : "application/pdf"
										})
							}
						}, {
							textKey : "downloadSVG",
							onclick : function() {
								this.exportChart({
											type : "image/svg+xml"
										})
							}
						}]
			},
			printButton : {
				symbol : "printIcon",
				symbolFill : "#B5C9DF",
				hoverSymbolFill : "#779ABF",
				_titleKey : "printButtonTitle",
				tooltip : "Print Chart",
				onclick : function() {
					this.print()
				}
			}
		}
	};
	f(t.prototype, {
		getSVG : function(a) {
			var h = this, l, t, m, A, J, B, K = D(h.options, a);
			if (!y.createElementNS)
				y.createElementNS = function(a, e) {
					var f = y.createElement(e);
					f.getBBox = function() {
						return z.Renderer.prototype.Element.prototype.getBBox
								.apply({
											element : f
										})
					};
					return f
				};
			a = Ta("div", null, {
						position : "absolute",
						top : "-9999em",
						width : h.chartWidth + "px",
						height : h.chartHeight + "px"
					}, y.body);
			f(K.chart, {
						renderTo : a,
						forExport : !0
					});
			K.exporting.enabled = !1;
			if (!K.exporting.enableImages)
				K.chart.plotBackgroundImage = null, K.chart.bgSWF = void 0, K.chart.bgImage = void 0, K.chart.logoURL = void 0;
			K.series = [];
			o(h.series, function(a) {
						m = a.options;
						m.animation = !1;
						m.showCheckbox = !1;
						m.visible = a.visible;
						if (!K.exporting.enableImages && m && m.marker
								&& /^url\(/.test(m.marker.symbol))
							m.marker.symbol = "circle";
						m.data = [];
						o(a.data, function(a) {
									A = a.config;
									J = {
										x : a.x,
										y : a.y,
										name : a.name
									};
									typeof A == "object" && a.config
											&& A.constructor != Array
											&& f(J, A);
									J.visible = a.visible;
									m.data.push(J);
									K.exporting.enableImages
											|| (B = a.config && a.config.marker)
											&& /^url\(/.test(B.symbol)
											&& delete B.symbol
								});
						K.series.push(m)
					});
			l = new z.Chart(K);
			o(["xAxis", "yAxis"], function(a) {
				o(h[a], function(e, f) {
					var h = l[a][f], q = e.getExtremes(), m = q.userMin, q = q.userMax;
					(m !== void 0 || q !== void 0)
							&& h.setExtremes(m, q, !0, !1)
				})
			});
			t = l.container.innerHTML;
			K = null;
			l.destroy();
			e(a);
			t = t.replace(/zIndex="[^"]+"/g, "").replace(/isShadow="[^"]+"/g,
					"").replace(/symbolName="[^"]+"/g, "").replace(
					/jQuery[0-9]+="[^"]+"/g, "").replace(/isTracker="[^"]+"/g,
					"").replace(/url\((\\?[\'\"])[^#]+#/g, "url($1#")
					.replace(/<svg /,
							'<svg xmlns:xlink="http://www.w3.org/1999/xlink" ')
					.replace(/ href=/g, " xlink:href=").replace(
							/id=([^" >]+)/g, 'id="$1"').replace(
							/class=([^" >]+)/g, 'class="$1"').replace(
							/ transform /g, " ").replace(/:(path|rect)/g, "$1")
					.replace(/<img ([^>]*)>/gi, "<image $1 />").replace(
							/<\/image>/g, "").replace(
							/<image ([^>]*)([^\/])>/gi, "<image $1$2 />")
					.replace(/width=(\d+)/g, 'width="$1"').replace(
							/height=(\d+)/g, 'height="$1"').replace(
							/hc-svg-href="/g, 'xlink:href="').replace(
							/style="([^"]+)"/g, function(a) {
								return a.toLowerCase()
							});
			t = t.replace(/(url\(#highcharts-[0-9]+)&quot;/g, "$1").replace(
					/&quot;/g, "'");
			t.match(/ xmlns="/g).length == 2
					&& (t = t.replace(/xmlns="[^"]+"/, ""));
			return t
		},
		exportChart : function(a, f) {
			var h, t = this.getSVG(f), a = D(this.options.exporting, a);
			h = Ta("form", {
						method : "post",
						action : a.url
					}, {
						display : "none"
					}, y.body);
			o(["filename", "type", "width", "svg"], function(e) {
						Ta("input", {
									type : "hidden",
									name : e,
									value : {
										filename : a.filename || "chart",
										type : a.type,
										width : a.width,
										svg : t
									}[e]
								}, null, h)
					});
			h.submit();
			e(h)
		},
		print : function() {
			var a = this, e = a.container, f = [], t = e.parentNode, m = y.body, A = m.childNodes;
			if (!a.isPrinting)
				a.isPrinting = !0, o(A, function(a, e) {
							if (a.nodeType == 1)
								f[e] = a.style.display, a.style.display = "none"
						}), m.appendChild(e), h.print(), setTimeout(function() {
							t.appendChild(e);
							o(A, function(a, e) {
										if (a.nodeType == 1)
											a.style.display = f[e]
									});
							a.isPrinting = !1
						}, 1E3)
		},
		contextMenu : function(e, h, l, t, m, J) {
			var D = this, y = D.options.navigation, Bb = y.menuItemStyle, kb = D.chartWidth, $ = D.chartHeight, ha = "cache-"
					+ e, La = D[ha], vb = K(m, J), Xa, Ua;
			if (!La)
				D[ha] = La = Ta("div", {
							className : "highcharts-" + e
						}, {
							position : "absolute",
							zIndex : 1E3,
							padding : vb + "px"
						}, D.container), Xa = Ta("div", null, f({
									MozBoxShadow : "1px 1px 3px rgba(0,0,0,0.5)",
									WebkitBoxShadow : "1px 1px 3px rgba(0,0,0,0.5)",
									boxShadow : "1px 1px 3px rgba(0,0,0,0.5)"
								}, y.menuStyle), La), Ua = function() {
					B(La, {
								display : "none"
							})
				}, A(La, "mouseleave", Ua), o(h, function(e) {
					e && (Ta("div", {
								onmouseover : function() {
									B(this, y.menuItemHoverStyle)
								},
								onmouseout : function() {
									B(this, Bb)
								},
								innerHTML : e.text
										|| z.getOptions().lang[e.textKey]
							}, f({
										cursor : "pointer"
									}, Bb), Xa)[a ? "ontouchstart" : "onclick"] = function() {
						Ua();
						e.onclick.apply(D, arguments)
					})
				}), D.exportMenuWidth = La.offsetWidth, D.exportMenuHeight = La.offsetHeight;
			e = {
				display : "block"
			};
			l + D.exportMenuWidth > kb
					? e.right = kb - l - m - vb + "px"
					: e.left = l - vb + "px";
			t + J + D.exportMenuHeight > $
					? e.bottom = $ - t - vb + "px"
					: e.top = t + J - vb + "px";
			B(La, e)
		},
		addButton : function(a) {
			function e() {
				K.active
						|| (y.attr(Xa), z.attr(Ta), Ua && h.tooltip
								&& h.tooltip.hide())
			}
			var h = this, t = h.renderer, m = D(
					h.options.navigation.buttonOptions, a), o = m.onclick, J = m.menuItems, A = m.width, B = m.height, z, y, K, a = m.paddingRight, La = m.borderWidth, Ta = {
				stroke : m.borderColor,
				fill : m.backgroundColor
			}, Xa = {
				stroke : m.symbolStroke,
				fill : m.symbolFill
			}, Ua;
			if (m.enabled === !1)
				return {};
			h.options.navigation._buttonOptions.x > 0 && (a = 0);
			if (m.x == void 0)
				m.x = h.options.navigation._buttonOptions.x - A - 5 - (a || 0);
			h.options.navigation._buttonOptions.x = m.x;
			z = t.rect(0, 0, A, B, m.borderRadius, La).align(m, !0).attr(f({
						fill : m.backgroundColor,
						"stroke-width" : La,
						zIndex : 19
					}, Ta)).add();
			K = t.rect(0, 0, A, B, 0).align(m).attr({
						fill : "rgba(255, 255, 255, 0.001)",
						zIndex : 21
					}).css({
						cursor : "pointer"
					}).on("mouseover", function() {
						y.attr({
									stroke : m.hoverSymbolStroke,
									fill : m.hoverSymbolFill
								});
						z.attr({
									stroke : m.hoverBorderColor
								});
						Ua && h.tooltip && h.tooltip.refresh(Ua)
					}).on("mouseout", e).on("click", e).add();
			Ua = m.tooltip ? {
				tooltipPos : [K.attr("x") - 15, K.attr("y") + 15],
				series : {},
				svgElm : K.svgElm,
				point : {
					toolText : m.tooltip
				},
				getLabelConfig : function() {
					return this
				},
				tooltipConstraint : "chart"
			} : void 0;
			J && (o = function() {
				e();
				var a = K.getBBox();
				h.contextMenu("export-menu", J, a.x, a.y, A, B)
			});
			K.on("click", function() {
						o.apply(h, arguments);
						Ua && h.tooltip && h.tooltip.hide()
					});
			y = t.symbol(m.symbol, m.symbolX, m.symbolY,
					(m.symbolSize || 8) / 2).align(m, !0).attr(f(Xa, {
						"stroke-width" : m.symbolStrokeWidth || 1,
						zIndex : 20
					})).add();
			return {
				options : m,
				tooltipOptions : Ua,
				hide : function() {
					e();
					y.hide();
					K.hide();
					z.hide()
				},
				show : function() {
					y.show();
					K.show();
					z.show()
				},
				activate : function(a) {
					(a = K.active = !!a) ? (z.attr({
								stroke : m.hoverBorderColor,
								fill : m.activeBackgroundColor
							}), y.attr({
								stroke : m.hoverSymbolStroke,
								fill : m.hoverSymbolFill
							})) : e()
				}
			}
		}
	});
	z.Renderer.prototype.symbols.exportIcon = function(a, e, f) {
		return ["M", a - f, e + f, "L", a + f, e + f, a + f, e + f * 0.5,
				a - f, e + f * 0.5, "Z", "M", a, e + f * 0.5, "L", a - f * 0.5,
				e - f / 3, a - f / 6, e - f / 3, a - f / 6, e - f, a + f / 6,
				e - f, a + f / 6, e - f / 3, a + f * 0.5, e - f / 3, "Z"]
	};
	z.Renderer.prototype.symbols.printIcon = function(a, e, f) {
		return ["M", a - f, e + f * 0.5, "L", a + f, e + f * 0.5, a + f,
				e - f / 3, a - f, e - f / 3, "Z", "M", a - f * 0.5, e - f / 3,
				"L", a - f * 0.5, e - f, a + f * 0.5, e - f, a + f * 0.5,
				e - f / 3, "Z", "M", a - f * 0.5, e + f * 0.5, "L",
				a - f * 0.75, e + f, a + f * 0.75, e + f, a + f * 0.5,
				e + f * 0.5, "Z"]
	};
	t.prototype.callbacks.push(function(a) {
				var e, f = a.options.exporting, h = f.buttons;
				if (f.enabled !== !1)
					for (e in h)
						a.addButton(h[e])
			})
}]);
(function() {
	var y = CnbiSoft(["private", "modules.renderer.highcharts-base"]);
	if (y !== void 0) {
		var h = y.hcLib, K = !/CnbiSoft\.com$/i.test(location.hostname), z = h.BLANKSTRINGPLACEHOLDER, t = h.BLANKSTRING, Ta = h.createTrendLine, e = h.pluck, B = h.getValidValue, a = h.pluckNumber, f = h.defaultPaletteOptions, D = h.getFirstValue, o = h.getDefinedColor, A = h.parseUnsafeString, J = h.FC_CONFIG_STRING, q = h.extend2, ma = h.getDashStyle, l = h.toPrecision, W = h.graphics.getColumnColor, m = h.getFirstColor, zb = h.setLineHeight, Ca = h.pluckFontSize, Tb = h.getFirstAlpha, Bb = h.graphics.getDarkColor, kb = h.graphics.getLightColor, $ = h.graphics.convertColor, ha = h.COLOR_TRANSPARENT, La = h.POSITION_CENTER, vb = h.POSITION_TOP, Xa = h.POSITION_BOTTOM, Ua = h.POSITION_RIGHT, Q = h.POSITION_LEFT, E = h.chartAPI, O = h.graphics.mapSymbolName, fa = h.COMMASTRING, Va = h.ZEROSTRING, hb = h.ONESTRING, ab = h.HUNDREDSTRING, Wa = h.PXSTRING, rb = h.BGRATIOSTRING, Ab = h.COMMASPACE, ub = h.COLOR_WHITE, N = h.TESTSTR, $a = h.graphics.getAngle, F = h.POSITION_MIDDLE, na = h.STRINGUNDEFINED, Z = h.axisLabelAdder, wa = h.falseFN, kc = h.SmartLabelManager, ec = h.NumberFormatter, fc = h.getLinkAction, Xb = h.getAxisLimits, Ub = h.HASHSTRING, mb = h.createDialog, cb = h.regex.dropHash, qa = Math.max, gc = Math.min, Dc = h.Highcharts, Qa = {
			fontWeight : {
				1 : "bold",
				0 : "normal"
			},
			fontStyle : {
				1 : "italic",
				0 : "normal"
			},
			textDecoration : {
				1 : "underline",
				0 : "none"
			}
		}, lb = {
			font : function(a, j) {
				j.style.fontFamily = a
			},
			size : function(a, j) {
				if (a)
					j.style.fontSize = Ca(a) + Wa
			},
			color : function(a, j, e) {
				j.style.color = a && a.replace && a.replace(cb, Ub) || t;
				if (e)
					j.color = j.style.color
			},
			bgcolor : function(a, j) {
				j.style.backgroundColor = a && a.replace && a.replace(cb, Ub)
						|| t
			},
			bordercolor : function(a, j) {
				j.style.border = "1px solid";
				j.style.borderColor = a && a.replace && a.replace(cb, Ub) || t
			},
			ishtml : t,
			leftmargin : function(d, j) {
				j.style.marginLeft = a(d, 0) + Wa
			},
			letterspacing : function(d, j) {
				j.style.letterSpacing = a(d, 0) + Wa
			},
			bold : function(a, j) {
				j.style.fontWeight = Qa.fontWeight[a] || ""
			},
			italic : function(a, j) {
				j.style.fontStyle = Qa.fontStyle[a] || ""
			},
			underline : function(a, j) {
				j.style.textDecoration = Qa.textDecoration[a] || ""
			}
		}, ga = {
			chart2D : {
				bgColor : "bgColor",
				bgAlpha : "bgAlpha",
				bgAngle : "bgAngle",
				bgRatio : "bgRatio",
				canvasBgColor : "canvasBgColor",
				canvasBaseColor : "canvasBaseColor",
				divLineColor : "divLineColor",
				legendBgColor : "legendBgColor",
				legendBorderColor : "legendBorderColor",
				toolTipbgColor : "toolTipbgColor",
				toolTipBorderColor : "toolTipBorderColor",
				baseFontColor : "baseFontColor",
				anchorBgColor : "anchorBgColor"
			},
			chart3D : {
				bgColor : "bgColor3D",
				bgAlpha : "bgAlpha3D",
				bgAngle : "bgAngle3D",
				bgRatio : "bgRatio3D",
				canvasBgColor : "canvasBgColor3D",
				canvasBaseColor : "canvasBaseColor3D",
				divLineColor : "divLineColor3D",
				divLineAlpha : "divLineAlpha3D",
				legendBgColor : "legendBgColor3D",
				legendBorderColor : "legendBorderColor3D",
				toolTipbgColor : "toolTipbgColor3D",
				toolTipBorderColor : "toolTipBorderColor3D",
				baseFontColor : "baseFontColor3D",
				anchorBgColor : "anchorBgColor3D"
			}
		}, R = function() {
			var a = {}, j, e = function() {
				var c, g, e, f, p = 0, h;
				for (c in a)
					if (p += 1, g = a[c], e = g.jsVars, f = (g = g.ref)
							&& g.parentNode) {
						if (h = f.offsetWidth, f = f.offsetHeight, !e.resizeLocked
								&& (e._containerOffsetW !== h || e._containerOffsetH !== f))
							g.resize && g.resize(), e._containerOffsetW = h, e._containerOffsetH = f
					} else
						delete a[c], p -= 1;
				p || (j = clearInterval(j))
			};
			return function(c) {
				var g = c.jsVars, f = c.ref && c.ref.parentNode || {};
				g._containerOffsetW = f.offsetWidth;
				g._containerOffsetH = f.offsetHeight;
				a[c.id] = c;
				j || (j = setInterval(e, 300))
			}
		}(), yb = {
			getExternalInterfaceMethods : function() {
				var a = E[this.jsVars.type], a = a && a.eiMethods, j = "saveAsImage,print,exportChart,getXML,hasRendered,signature,cancelExport,";
				if (typeof a === "string")
					j += a + fa;
				else if (a !== void 0 || a !== null)
					for (var e in a)
						j += e + fa;
				return j.substr(0, j.length - 1)
			},
			drawOverlayButton : function(a) {
				var j = this.jsVars, e = j.$overlayButton;
				if (a && a.show) {
					if (!e)
						e = j.$overlayButton = jQuery("<span>"), e.click(
								function() {
									y.raiseEvent("OverlayButtonClick", a,
											j.fcObj)
								});
					e.text(a.message ? a.message : "Back");
					j.overlayButtonMessage = e.text();
					e.css({
								border : "1px solid "
										+ (a.borderColor ? a.borderColor
												.replace(cb, Ub) : "#7f8975"),
								backgroundColor : a.bgColor ? a.bgColor
										.replace(cb, Ub) : "#edefec",
								fontFamily : a.font ? a.font : "Verdana",
								color : "#" + a.fontColor
										? a.fontColor
										: "49563a",
								fontSize : (a.fontSize ? a.fontSize : "10")
										+ Wa,
								padding : (a.padding ? a.padding : "3") + Wa,
								fontWeight : parseInt(a.bold, 10) === 0
										? "normal"
										: "bold",
								position : "absolute",
								top : "0",
								right : "0",
								_cursor : "hand",
								cursor : "pointer"
							});
					j.hcObj.container.appendChild(e[0]);
					j.overlayButtonActive = !0
				} else if (e)
					e.detach(), j.overlayButtonActive = !1, delete j.overlayButtonMessage
			},
			print : function() {
				return this.jsVars.hcObj && this.jsVars.hcObj.hasRendered
						&& this.jsVars.hcObj.print()
			},
			exportChart : function(a) {
				var j = this.jsVars.hcObj, e = {}, c;
				if (j && j.options && j.options.exporting
						&& j.options.exporting.enabled) {
					if (!(a === void 0 || a === null))
						for (c in a)
							switch (c.toLowerCase()) {
								case "exportfilename" :
									e.filename = a[c];
									break;
								case "exportformat" :
									e.type = {
										png : "image/png",
										jpg : "image/jpeg",
										pdf : "application/pdf",
										svg : "image/svg+xml"
									}[a[c].toLowerCase()] || "image/png"
							}
					j.exportChart(e)
				}
			},
			getSVGString : function() {
				return this.jsVars && this.jsVars.hcObj
						&& this.jsVars.hcObj.getSVG
						&& this.jsVars.hcObj.getSVG()
			},
			resize : function() {
				var a = this.jsVars, j = a.container, e = a.fcObj, c = a.hcObj;
				c
						&& (c && c.destroy && c.destroy(), h.createChart(
								a.fcObj, j, a.type, void 0, void 0, !1), delete a.isResizing, h
								.raiseEvent("resized", {
											width : e.width,
											height : e.height,
											prevWidth : a.width,
											prevHeight : a.height
										}, e, [e.id]))
			},
			lockResize : function(a) {
				return this.jsVars.resizeLocked = a === void 0 && !0 || a
			},
			showChartMessage : function(a) {
				var j = this.jsVars, e = j.hcObj;
				j.msgStore[a] && (a = j.msgStore[a]);
				e && e.destroy && e.destroy();
				h.createChart(j.fcObj, j.container, j.type, void 0, a);
				return a
			},
			signature : function() {
				return "CnbiSoft/3.2.2 (XT)"
			}
		};
		h.createChart = function(a, j, e, c, g, f) {
			var s = a.jsVars, l = s.msgStore, n, v = E[e], X, t = function(g) {
				var f = {
					renderer : "javascript"
				}, w = s.fcObj, n = w.width, l = w.height, t = v && v.eiMethods, m = s.$overlayButton;
				j.jsVars = a.jsVars;
				s.container = j;
				s.hcObj = g;
				s.type = e;
				s.width = j.offsetWidth;
				s.height = j.offsetHeight;
				s.instanceAPI = X;
				g.container.style.backgroundColor = s.transparent
						? "transparent"
						: "#ffffff";
				if (g.hasRendered) {
					y.extend(j, yb);
					if (t && typeof t !== "string")
						for (var q in t)
							j[q] = t[q];
					s.overlayButtonActive
							&& m
							&& (m.text(s.overlayButtonMessage), g.container
									.appendChild(m[0]))
				}
				c
						&& (c({
									success : g.hasRendered,
									ref : j,
									id : a.id
								}), g.hasRendered
								&& (n = Number((n && n.match
										&& n.match(/^\s*(\d*\.?\d*)\%\s*$/) || [])[1]), l = Number((l
										&& l.match
										&& l.match(/^\s*(\d*\.?\d*)\%\s*$/) || [])[1]), (n || l)
										&& w.ref && w.ref.parentNode && R(w), h
										.raiseEvent("loaded", {
													type : e,
													renderer : "javascript"
												}, a, [a.id]), h.raiseEvent(
										"rendered", {
											renderer : "javascript"
										}, w, [w.id])));
				if (g.hasRendered)
					f.width = s.width, f.height = s.height, f.drawCount = s.drawCount, f.drawingLatency = X.drawingLatency, h
							.raiseEvent("drawcomplete", f, w, [w.id])
			};
			a.__state.dataReady = !1;
			s.instanceAPI && s.instanceAPI.dispose && s.instanceAPI.dispose();
			X = v ? new E(e) : new E("stub");
			X.chartInstance = a;
			if (g !== void 0) {
				if (typeof g === "string")
					g = new mb(j, g), s.hasNativeMessage = !0
			} else
				!v || !v.init || v && v.name === "stub"
						? (g = new mb(j, l.ChartNotSupported), s.hasNativeMessage = !0)
						: s.message
								? (g = new mb(j, s.message), s.hasNativeMessage = !0)
								: s.loadError
										? (g = new mb(j, l.LoadDataErrorText), s.hasNativeMessage = !0)
										: s.stallLoad
												? (g = new mb(j,
														l.XMLLoadingText), s.hasNativeMessage = !0)
												: (g = a
														.getChartData(
																CnbiSoftDataFormats.JSON,
																!0), n = g.data, g.error instanceof Error
														? (g = new mb(
																j,
																l.InvalidXMLText), s.hasNativeMessage = !0, h
																.raiseEvent(
																		"dataxmlinvalid",
																		{},
																		s.fcObj,
																		[s.fcObj.id]))
														: (h.raiseEvent(
																"dataloaded",
																{}, s.fcObj,
																[s.fcObj.id]), g = X
																.init(j, n, a,
																		t), s.drawCount += 1, g.series.length === 0
																? (g = new mb(
																		j,
																		l.ChartNoDataText), s.hasNativeMessage = !0, h
																		.raiseEvent(
																				"nodatatodisplay",
																				{},
																				s.fcObj,
																				[s.fcObj.id]))
																: (a.__state.dataReady = !0, s.hasNativeMessage = !1, delete s.message)));
			if (!g)
				g = new mb(j, "Error rendering chart {0x01}"), s.hasNativeMessage = !0;
			g.chart = g.chart || {};
			g.chart.renderTo = j;
			g.instanceAPI = X;
			g.credits = g.credits || {};
			g.credits.enabled = v && v.creditLabel === !0 ? !0 : !1;
			if (f === !1)
				(g.plotOptions || (g.plotOptions = {}))
						&& (g.plotOptions.series || (g.plotOptions.series = {})), g.plotOptions.series.animation = !1;
			return X.draw(g, t)
		};
		var Qb = h.HCstub = function(d, j, e, c) {
			var d = d.chart, g = a(d.charttopmargin, c.charttopmargin, 15), f = a(
					d.chartrightmargin, c.chartrightmargin, 15), h = a(
					d.chartbottommargin, c.chartbottommargin, 15), l = a(
					d.chartleftmargin, c.chartleftmargin, 15), n = g + h, v = l
					+ f;
			e *= 0.7;
			j *= 0.7;
			n > e && (g -= (n - e) * g / n, h -= (n - e) * h / n);
			v > j && (l -= (v - j) * l / v, f -= (v - j) * f / v);
			j = {
				_FCconf : {
					0 : {
						stack : {}
					},
					1 : {
						stack : {}
					},
					x : {
						stack : {}
					},
					oriCatTmp : [],
					noWrap : !1,
					marginLeftExtraSpace : 0,
					marginRightExtraSpace : 0,
					marginBottomExtraSpace : 0,
					marginTopExtraSpace : 0,
					marimekkoTotal : 0
				},
				chart : {
					alignTicks : !1,
					renderTo : t,
					ignoreHiddenSeries : !1,
					events : {},
					reflow : !1,
					spacingTop : g,
					spacingRight : f,
					spacingBottom : h,
					spacingLeft : l,
					marginTop : g,
					marginRight : f,
					marginBottom : h,
					marginLeft : l,
					borderRadius : 0,
					plotBackgroundColor : "#FFFFFF",
					style : {}
				},
				colors : ["AFD8F8", "F6BD0F", "8BBA00", "FF8E46", "008E8E",
						"D64646", "8E468E", "588526", "B3AA00", "008ED6",
						"9D080D", "A186BE", "CC6600", "FDC689", "ABA000",
						"F26D7D", "FFF200", "0054A6", "F7941C", "CC3300",
						"006600", "663300", "6DCFF6"],
				credits : {
					href : "#",
					text : "",
					enabled : !0
				},
				global : {},
				labels : {
					items : []
				},
				lang : {},
				legend : {
					enabled : !0,
					symbolWidth : 12,
					borderRadius : 1,
					backgroundColor : "#FFFFFF",
					initialItemX : 0,
					title : {
						text : t,
						x : 0,
						y : 0,
						padding : 2
					},
					scroll : {},
					itemStyle : {}
				},
				loading : {},
				plotOptions : {
					series : {
						pointPadding : 0,
						borderColor : "#333333",
						events : {},
						animation : d.animation == Va ? !1 : {
							duration : a(d.animationduration, 1) * 1E3
						},
						states : {
							hover : {
								enabled : !1
							},
							select : {
								enabled : !1
							}
						},
						dataLabels : {
							enabled : !0,
							color : "#555555",
							style : {},
							formatter : function() {
								return this.point.showPercentValues
										? c.numberFormatter
												.percentValue(this.percentage)
										: this.point.displayValue
							}
						},
						point : {
							events : {}
						}
					},
					area : {
						states : {
							hover : {
								enabled : !1
							}
						},
						marker : {
							lineWidth : 1,
							radius : 3,
							states : {
								hover : {
									enabled : !1
								},
								select : {
									enabled : !1
								}
							}
						}
					},
					radar : {
						states : {
							hover : {
								enabled : !1
							}
						},
						marker : {
							lineWidth : 1,
							radius : 3,
							states : {
								hover : {
									enabled : !1
								},
								select : {
									enabled : !1
								}
							}
						}
					},
					areaspline : {
						states : {
							hover : {
								enabled : !1
							}
						},
						marker : {
							lineWidth : 1,
							radius : 3,
							states : {
								hover : {
									enabled : !1
								},
								select : {
									enabled : !1
								}
							}
						}
					},
					line : {
						shadow : !0,
						states : {
							hover : {
								enabled : !1
							}
						},
						marker : {
							lineWidth : 1,
							radius : 3,
							states : {
								hover : {
									enabled : !1
								},
								select : {
									enabled : !1
								}
							}
						}
					},
					scatter : {
						states : {
							hover : {
								enabled : !1
							}
						},
						marker : {
							lineWidth : 1,
							radius : 3,
							states : {
								hover : {
									enabled : !1
								},
								select : {
									enabled : !1
								}
							}
						}
					},
					bubble : {
						states : {
							hover : {
								enabled : !1
							}
						},
						marker : {
							lineWidth : 1,
							radius : 3,
							states : {
								hover : {
									enabled : !1
								},
								select : {
									enabled : !1
								}
							}
						}
					},
					spline : {
						states : {
							hover : {
								enabled : !1
							}
						},
						marker : {
							lineWidth : 1,
							radius : 3,
							states : {
								hover : {
									enabled : !1
								},
								select : {
									enabled : !1
								}
							}
						}
					},
					pie : {
						size : "80%",
						allowPointSelect : !0,
						cursor : "pointer",
						point : {
							events : {
								legendItemClick : d.interactivelegend === Va
										? wa
										: function() {
											this.slice();
											return !1
										}
							}
						}
					},
					pie3d : {
						size : "80%",
						allowPointSelect : !0,
						cursor : "pointer",
						point : {
							events : {
								legendItemClick : d.interactivelegend === Va
										? wa
										: function() {
											this.slice();
											return !1
										}
							}
						}
					},
					column : {},
					floatedcolumn : {},
					column3d : {},
					bar : {},
					bar3d : {}
				},
				point : {},
				series : [],
				subtitle : {
					text : t,
					style : {}
				},
				symbols : [],
				title : {
					text : t,
					style : {}
				},
				toolbar : {},
				tooltip : {
					borderRadius : 1,
					style : {},
					formatter : function() {
						return this.point.showPercentInToolTip
								? this.point.toolText
										+ parseInt(this.percentage * 100, 10)
										/ 100 + "%"
								: this.point.toolText
					}
				},
				xAxis : {
					steppedLabels : {
						style : {}
					},
					labels : {
						x : 0,
						style : {},
						enabled : !1
					},
					lineWidth : 0,
					plotLines : [],
					plotBands : [],
					title : {
						style : {},
						text : t
					},
					tickWidth : 0,
					scroll : {
						enabled : !1
					}
				},
				yAxis : [{
							startOnTick : !1,
							endOnTick : !1,
							title : {
								style : {},
								text : t
							},
							tickLength : 0,
							labels : {
								x : 0,
								style : {}
							},
							plotBands : [],
							plotLines : []
						}, {
							tickLength : 0,
							gridLineWidth : 0,
							startOnTick : !1,
							endOnTick : !1,
							title : {
								style : {},
								text : t
							},
							labels : {
								x : 0,
								style : {},
								enabled : !1,
								formatter : function() {
									return this.value !== z ? this.value : t
								}
							},
							opposite : !0,
							plotBands : [],
							plotLines : []
						}],
				exporting : {
					buttons : {
						exportButton : {},
						printButton : {
							enabled : !1
						}
					}
				}
			};
			if (d.palettecolors && typeof d.palettecolors === "string")
				j.colors = d.palettecolors.split(fa);
			return c.hcJSON = j
		}, ca = h.placeVerticalAxis = function(d, j, e, c, g, f, h, l, n, v) {
			var X = e[J], m = X.smartLabel, r, q, o, A, C = 0, l = X.marginRightExtraSpace, z = X.marginLeftExtraSpace, ba = {}, G = {}, V = {}, D = d.plotLines, F = d.plotBands, S = j.verticalAxisValuesPadding, T = j.verticalAxisValuesPadding, y = j.verticalAxisNamePadding, E = j.verticalAxisNameWidth, K = j.rotateVerticalAxisName, O = 0, W = 0, R = 0, fa = 0, L = 0, Y = 0, ga = 0, Z, tb, P, $, X = 2, na = function(
					a, d) {
				var c, g;
				if (a && a.label && B(a.label.text) !== void 0) {
					P = a.label;
					if (P.style && P.style !== tb)
						tb = P.style, m.setStyle(tb);
					r = m.getOriSize(a.label.text);
					g = (c = r.width) ? c + 2 : 0;
					if (a.isGrid) {
						if (ba[d] = {
							width : c,
							height : r.height,
							label : P
						}, fa <= g)
							fa = g, j.lYLblIdx = d
					} else
						a.isTrend
								&& (h && P.textAlign === Q
										|| P.textAlign === Ua ? (G[d] = {
									width : c,
									height : r.height,
									label : P
								}, L = qa(L, g)) : (V[d] = {
									width : c,
									height : r.height,
									label : P
								}, Y = qa(Y, g)))
				}
			}, ga = function(a, c) {
				var j, e = c ? C : C + a;
				return e > 0
						? (K
								? (e < q.height
										&& (q = m.getSmartText(d.title.text, g,
												e)), j = q.height)
								: (e < q.width
										&& (q = m.getSmartText(d.title.text, e,
												g)), j = q.width), d.title.text = q.text, c
								? e - j + a
								: e - j)
						: (d.title.text = t, 0)
			}, ma = function(a, d, c) {
				for (var j in a)
					a[j].label.x = d, a[j].label.y = c
			};
			Z = 0;
			for (R = F.length; Z < R; Z += 1)
				na(F[Z], Z);
			Z = 0;
			for (R = D.length; Z < R; Z += 1)
				na(D[Z], Z);
			if (d.title && d.title.text != t)
				tb = d.title.style, m.setStyle(tb), o = m.getOriSize(N).height, K
						? (q = m.getSmartText(d.title.text, g, f), C = q.height, A = o)
						: (d.title.rotation = 0, q = m.getSmartText(
								d.title.text, E !== void 0 ? E : f, g), C = q.width, A = 20);
			Y > 0 && (W = Y + T);
			n
					&& (c = a(c.chart.maxlabelwidthpercent, 0), c >= 1
							&& c <= 100
							&& (n = c * n / 100, fa > n && (fa = n)));
			O = qa(L, fa);
			C > 0 && (O += C + 2 + y + S);
			(function() {
				if (W + O > f) {
					$ = W + O - f;
					if (W)
						if (T >= $) {
							T -= $;
							return
						} else
							$ -= T, T = 0;
					if (S + y >= $)
						y >= $ ? y -= $ : (S -= $ - y, y = 0);
					else {
						$ -= S + y;
						y = S = 0;
						if (Y > 20)
							if (L > fa)
								if (Y - L >= $) {
									Y -= $;
									return
								} else if (L - Y >= $) {
									L -= $;
									return
								} else if (L > Y
										? ($ -= L - Y, L = Y)
										: ($ -= Y - L, Y = L), 2 * (L - fa) >= $) {
									Y -= $ / 2;
									L -= $ / 2;
									return
								} else
									$ -= 2 * (L - fa), Y = L = fa;
							else if (Y - 20 >= $) {
								Y -= $;
								return
							} else
								$ -= Y - 20, Y = 20;
						if (L > fa)
							if (L - fa >= $) {
								L -= $;
								return
							} else
								$ -= L - fa, L = fa;
						C - A >= $ ? C -= $ : ($ -= C - A, C = A, Y >= $
								? Y = 0
								: ($ -= Y, Y = 0, C >= $
										? C = 0
										: ($ -= C, C = 0, fa >= $
												&& (fa -= $, L = fa))))
					}
				}
			})();
			R = function(a, d) {
				var c, j = 0, e = d ? Y - 2 : Y + a - 2;
				if (Y > 0) {
					for (Z in V)
						if (P = V[Z].label, V[Z].width > e) {
							if (P.style && P.style !== tb)
								tb = P.style, m.setStyle(tb);
							c = m.getSmartText(P.text, e, g, !0);
							P.text = c.text;
							V[Z].height = c.height;
							j = Math.max(j, c.width)
						} else
							j = Math.max(j, V[Z].width);
					return d ? e - j + a : e - j
				} else {
					for (Z in V)
						V[Z].label.text = t;
					return 0
				}
			}(0, !0);
			R = ga(R, !0);
			R = function(a) {
				var d = 0, c = Math.max(fa, L) + a - 2;
				if (c > 0) {
					for (Z in ba)
						if (P = ba[Z].label, ba[Z].width > c) {
							if (P.style && P.style !== tb)
								tb = P.style, m.setStyle(tb);
							a = m.getSmartText(P.text, c, g, !0);
							P.text = a.text;
							ba[Z].height = a.height;
							d = Math.max(d, a.width)
						} else
							d = Math.max(d, ba[Z].width);
					for (Z in G)
						if (P = G[Z].label, G[Z].width > c) {
							if (P.style && P.style !== tb)
								tb = P.style, m.setStyle(tb);
							a = m.getSmartText(P.text, c, g, !0);
							P.text = a.text;
							G[Z].height = a.height;
							d = Math.max(d, a.width)
						} else
							d = Math.max(d, G[Z].width);
					return c - d
				} else {
					for (Z in ba)
						ba[Z].label.text = t;
					for (Z in G)
						G[Z].label.text = t;
					return 0
				}
			}(R);
			R = ga(R);
			n = j.verticalAxisNamePadding - y;
			R && n && (R > n ? (y += n, R -= n) : (y += R, R = 0));
			n = j.verticalAxisValuesPadding - S;
			R && n && (R > n ? (S += n, R -= n) : (S += R, R = 0));
			n = j.verticalAxisValuesPadding - T;
			R && n && (R > n ? (T += n, R -= n) : (T += R, R = 0));
			Y > 0 && (W = Y + T);
			O = qa(L, fa) + S;
			C > 0 && (O += C + y + (h ? 4 : 8));
			n = qa(L, fa);
			n += n > 0 ? y : 0;
			C > 0
					? (K
							? C < q.height
									&& (q = m.getSmartText(d.title.text, g, C))
							: (C < q.width
									&& (q = m.getSmartText(d.title.text, C, g)), d.title.y = -((q.height - o) / 2)), d.title.text = q.text, d.title.margin = n
							+ S
							+ z
							+ (h ? 8 : 4)
							+ (K ? q.height - o : q.width / 2))
					: d.title.text = t;
			o = -(S + z + 2);
			l = l + T + 2;
			ga = qa(L, fa);
			d.labels.style
					&& (X = parseInt(d.labels.style.fontSize, 10) * 0.35);
			h
					? (Y > 0 && ma(V, o, X), ga > 0
							&& (ma(ba, l, X), ma(G, l, X)))
					: (Y > 0 && ma(V, l, X), ga > 0
							&& (ma(ba, o, X), ma(G, o, X)));
			v
					? (e.chart.marginLeft += h ? W : O - v, e.chart.marginRight += h
							? O - v
							: W)
					: (e.chart.marginLeft += h ? W : O, e.chart.marginRight += h
							? O
							: W);
			return W + O
		}, pb = h.titleSpaceManager = function(d, j, e, c) {
			var g = j.chart, f = A(g.caption), j = A(g.subcaption), h = g = a(
					g.captionpadding, 10), l = d[J].smartLabel, n = !1, v = 0, X, m, r = 0, q = 0, o = 0, B = 0, C = 0, y = 0, ba = d.title, G = d.subtitle;
			if (f !== t)
				X = ba.style, o = a(parseInt(X.fontHeight, 10), parseInt(
								X.lineHeight, 10), 12), y = a(parseInt(
								X.fontSize, 10), 10);
			if (j !== t)
				m = G.style, B = a(parseInt(m.fontHeight, 10), parseInt(
								m.lineHeight, 10), 12), C = a(parseInt(
								m.fontSize, 10), 10);
			if (o > 0 || B > 0) {
				v = o + B + g;
				v > c
						? (r = v - c, n = !0, r < g
								? g -= r
								: (r -= g, g = 0, B > r
										? (q = B - r + 10, B = 0)
										: (r -= B, B = 0, o > r && (q = o - r), o = 0)))
						: q = c - v;
				if (o > 0)
					l.setStyle(X), o += q, c = l.getSmartText(f, e, o), q = o
							- c.height, o = c.height, ba.text = c.text, ba.y = y;
				if (B > 0)
					l.setStyle(m), B += q, e = l.getSmartText(j, e, B), q = B
							- e.height, B = e.height, G.text = e.text, G.y = C
							+ o;
				n && q > 0 && (g += gc(h - g, q));
				v = o + B + g;
				d.chart.marginTop += v
			}
			return v
		}, Da = h.stepYAxisNames = function(a, j, e, c, g, f) {
			for (var h = 0, l = c.plotLines, n = [], v, m = c.plotLines.length, j = j[J].smartLabel, q = parseFloat(Ca(
					e.basefontsize, 10)), r; h < m; h += 1)
				e = l[h], e.isGrid && e.label && e.label.text
						&& (n.push(e), e.value === 0 && (v = n.length - 1));
			if (m = n.length)
				if (c.labels.style ? j.setStyle(c.labels.style) : n[0].label
						&& n[0].label.style && j.setStyle(c.labels.style), h = j
						.getOriSize("W").height, f || (h += q * 0.4), a /= m
						- 1, a < h) {
					f = Math.max(1, Math.ceil(h / a));
					for (h = a = v; h < m; h += 1) {
						e = n[h];
						if (h === g) {
							if ((h - a) % f && r)
								r.label.text = "";
							a = g
						}
						if (e && e.label)
							(h - a) % f ? e.label.text = t : r = e
					}
					for (h = a = v; h >= 0; h -= 1) {
						e = n[h];
						if (h === g) {
							if ((a - h) % f && r)
								r.label.text = "";
							a = g
						}
						if (e && e.label)
							(a - h) % f ? e.label.text = t : r = e
					}
				}
		}, Ea = h.placeHorizontalAxis = function(d, j, e, c, g, f, h) {
			var l = e[J], n, v, m, q, r, o, A, y, C, z, ba = 0, G = 0, V = 10, D = 1, F = 0, S = F = 0, T = !1, E = !1, K = !1, Q = a(
					c.chart.labelstep, 0), O = j.labelDisplay, N = j.rotateLabels, R = j.horizontalLabelPadding, W = l.marginBottomExtraSpace;
			C = e.chart.marginLeft;
			var L = e.chart.marginRight, Y = l.smartLabel, $ = j.catCount, Z = j.slantLabels, P = g
					/ (d.max - d.min), fa = 0, ga = 0, S = {
				w : 0,
				h : 0
			}, ma = c && c.chart || {}, ha = a(ma.updateinterval,
					ma.refreshinterval)
					* 1E3, ma = ma.datastreamurl, Ea = Boolean(this.realtimeEnabled
					&& ha && ma !== void 0);
			if (d.labels.style)
				o = d.labels.style, Y.setStyle(o), y = Y.getOriSize("W"), V = y.height, A = y.width
						+ 4, z = Y.getOriSize("WWW").width + 4;
			var ea, aa, M = [], ha = [], pa = 0, ca = 0, ia, za, ma = j.horizontalAxisNamePadding;
			ea = 0;
			var ya = j.staggerLines, Ia = fa, wa = !1;
			if (d.title && d.title.text != t)
				o = d.title.style, Y.setStyle(o), F = Y.getOriSize("W").height, d.title.rotation = 0, q = Y
						.getSmartText(d.title.text, g, f), G = q.height;
			e.chart.marginLeft != parseInt(c.chart.chartleftmargin, 10)
					&& (n = !0);
			e.chart.marginRight != parseInt(c.chart.chartrightmargin, 10)
					&& (aa = !0);
			ea = g - h;
			switch (O) {
				case "none" :
					T = K = !0;
					N && (ba = Z ? 300 : 270, y = V, V = A, A = y);
					break;
				case "rotate" :
					ba = Z ? 300 : 270;
					y = V;
					V = A;
					A = y;
					T = !0;
					break;
				case "stagger" :
					E = T = !0;
					c = Math.floor((f - F) / V);
					c < ya && (ya = c);
					break;
				default :
					N && (ba = Z ? 300 : 270, y = V, V = A, A = y)
			}
			l.isBar && (T = !0);
			c = 0;
			h = d.plotLines;
			if (typeof e._FCconf.isXYPlot === na && !l.isBar) {
				for (ia = h.length; c < ia; c += 1)
					(v = h[c])
							&& (v.isGrid ? M.push(v) : v.isTrend && ha.push(v));
				N = d.plotBands;
				c = 0;
				for (ia = N.length; c < ia; c += 1)
					(v = N[c]) && ha.push(v);
				N = M.length - 1;
				ia = M.length;
				E && (ya > ia ? ya = ia : ya < 2 && (ya = 2));
				if (ia) {
					d.scroll && d.scroll.viewPortMin && d.scroll.viewPortMax
							? (m = d.scroll.viewPortMin, D = d.scroll.viewPortMax, aa = n = !1)
							: (m = d.min, D = d.max);
					c = (M[N].value - M[0].value) * P;
					za = c / ($ - 1);
					m = (M[0].value - m) * P;
					D = (D - M[N].value) * P;
					O === "auto"
							? za < z
									&& (ba = Z ? 300 : 270, y = V, V = A, A = y, T = !0)
							: O === "stagger" && (za *= ya);
					C = (m + C) * 2;
					if ((r = h[0].label) && r.text)
						r.style && Y.setStyle(r.style), z = Math.min(za, Y
										.getOriSize(r.text).width
										+ 4), z > C && (pa = (z - C) / 2);
					C = (D + L) * 2;
					if ((r = h[N].label) && r.text)
						r.style && Y.setStyle(r.style), z = Math.min(za, Y
										.getOriSize(r.text).width
										+ 4), z > C && (ca = (z - C) / 2);
					c = pa + ca;
					c > 0
							&& (ea > c
									? (L = (L = ca * g / (ca + g)) ? L + 4 : 0, e.chart.marginRight += L, g -= L, L = (L = pa
											* g / (pa + g)) ? L + 4 : 0, e.chart.marginLeft += L, g -= L, P = g
											/ (d.max - d.min))
									: pa < ca
											? ea >= ca && aa
													? (L = (L = ca * g
															/ (ca + g))
															? L + 4
															: 0, e.chart.marginRight += L, g -= L, P = g
															/ (d.max - d.min))
													: n
															&& (L = (L = pa * g
																	/ (pa + g))
																	? L + 4
																	: 0, e.chart.marginLeft += L, g -= L, P = g
																	/ (d.max - d.min))
											: ea >= pa && n
													? (L = (L = pa * g
															/ (pa + g))
															? L + 4
															: 0, e.chart.marginLeft += L, g -= L, P = g
															/ (d.max - d.min))
													: aa
															&& (L = (L = ca * g
																	/ (ca + g))
																	? L + 4
																	: 0, e.chart.marginRight += L, g -= L, P = g
																	/ (d.max - d.min)), c = (M[N].value - M[0].value)
									* P, za = c / ($ - 1));
					D = Q ? Q : Math.max(1, Math.ceil(A / za));
					if (l.x)
						l.x.stepValue = D;
					za *= D;
					for (m = 0; m < ia; m += 1) {
						v = M[m];
						if (m
								% D
								&& v.label
								&& (v.stepped = !0, v.label.style = d.steppedLabels.style, !Ea))
							continue;
						if (v && v.label && B(v.label.text) !== void 0) {
							r = v.label;
							if (r.style && r.style !== o)
								o = r.style, Y.setStyle(o);
							if (ba && K)
								n = Y.getOriSize(r.text), S.w = qa(S.w, n.width
												+ 4), S.h = qa(S.h, n.height);
							else if (!K)
								n = ba || E ? Y.getOriSize(r.text) : Y
										.getSmartText(r.text, za - 4, f, T), S.w = qa(
										S.w, n.width + 4), S.h = qa(S.h,
										n.height)
						}
					}
				}
				m = 0;
				for (ia = ha.length; m < ia; m += 1)
					if ((v = ha[m]) && v.label && B(v.label.text) !== void 0) {
						r = v.label;
						if (r.style && r.style !== o)
							o = r.style, Y.setStyle(o);
						n = Y.getOriSize(r.text);
						r.verticalAlign === Xa
								? fa = qa(fa, n.height)
								: ga = qa(ga, n.height)
					}
				d.scroll
						&& d.scroll.enabled
						&& !ba
						&& !K
						&& (L = S.w / 2, e.chart.marginLeft < L
								&& (C = L - e.chart.marginLeft, ea > C
										&& (g -= C, ea -= C, e.chart.marginLeft += C)), e.chart.marginRight < L
								&& (C = L - e.chart.marginRight, ea > C
										&& (g -= C, ea -= C, e.chart.marginRight += C)))
			} else {
				var Q = {}, Da, O = ca = 0, Ca = null;
				q = null;
				$ = {};
				wa = !0;
				P = g / (d.max - d.min);
				Ea = function(a, c, j) {
					var g, f, h, w, n, s;
					s = a.plotObj;
					n = a.labelTextWidth;
					if (!n) {
						r = s.label;
						if (r.style && r.style !== o)
							o = r.style, Y.setStyle(o);
						n = Y.getOriSize(r.text).width + 4;
						a.oriWidth = n;
						n > Da && (n = Da);
						a.labelTextWidth = n;
						a.leftEdge = s.value * P - n / 2;
						a.rightEdge = s.value * P + n / 2;
						if (j)
							n = Math.min(n, 2 * (v.value - d.min) * P
											+ e.chart.marginLeft), a.labelTextWidth = n
					}
					if (typeof c !== na) {
						j = c.plotObj;
						r = j.label;
						if (r.style && r.style !== o)
							o = r.style, Y.setStyle(o);
						c.oriWidth
								? h = c.oriWidth
								: (h = Y.getOriSize(r.text).width + 4, c.oriWidth = h);
						h > Da && (h = Da);
						c.labelTextWidth = h;
						c.leftEdge = j.value * P - h / 2;
						c.rightEdge = j.value * P + h / 2;
						g = s.value * P;
						f = g + n / 2;
						w = j.value * P;
						h = w - h / 2;
						if (h < f)
							if (g + A < w - A)
								f -= h, g = w - g, a.labelTextWidth = f > g
										? Math.min(n, g)
										: Math.max(A, n - f / 2), c.labelTextWidth = 2
										* (g - a.labelTextWidth / 2), a.leftEdge = s.value
										* P - a.labelTextWidth / 2, a.rightEdge = s.value
										* P + a.labelTextWidth / 2, c.leftEdge = j.value
										* P - c.labelTextWidth / 2, c.rightEdge = j.value
										* P + c.labelTextWidth / 2;
							else
								return c.labelTextWidth = 0, j.label.text = t, !1
					} else if (j)
						n = Math.min(n, 2 * (d.max - v.value) * P
										+ e.chart.marginRight), a.labelTextWidth = n, a.leftEdge = s.value
								* P - n / 2, a.rightEdge = s.value * P + n / 2;
					a.nextCat = c;
					return !0
				};
				E ? ya > ia ? ya = ia : ya < 2 && (ya = 2) : ya = 1;
				for (ia = h.length; c < ia; c += 1)
					if ((v = h[c]) && v.label && typeof v.label.text !== na)
						v.isGrid ? (pa = {
							plotObj : v
						}, v.isCat
								&& (N = c % ya, Q[N] || (Q[N] = []), Ca
										? (q = pa, Q[N].push(q))
										: (q = Ca = pa, Q[N].push(Ca))), M
								.push(pa)) : v.isTrend && ha.push({
									plotObj : v
								});
				N = d.plotBands;
				c = 0;
				for (ia = N.length; c < ia; c += 1)
					(v = N[c]) && v.isTrend && v.label
							&& typeof v.label.text !== na && ha.push({
										plotObj : v
									});
				if (M.length)
					if (!K && !ba)
						if (l.distributedColumns) {
							c = 0;
							for (ia = M.length; c < ia; c += 1)
								if (m = M[c], aa = c % ya, v = m.plotObj, v.label
										&& v.isCat) {
									c - ya >= 0
											? (n = M[c - ya], aa = n.plotObj.value
													* P
													+ n.plotObj._weight
													* P
													/ 2)
											: (n = null, aa = d.min * P - C);
									c + ya < ia
											? (y = M[c + ya], y = y.plotObj.value
													* P
													- y.plotObj._weight
													* P
													/ 2)
											: (y = null, y = d.max * P + L);
									r = v.label;
									if (r.style && r.style !== o)
										o = r.style, Y.setStyle(o);
									pa = v.value * P;
									ea = pa - v._weight * P / 2;
									Q = pa + v._weight * P / 2;
									ya > 1 ? (n = ea - aa, aa = Q + y, aa = Q
											- ea + Math.min(n, aa)) : aa = Q
											- ea;
									r = v.label;
									r.style && r.style !== o
											&& Y.setStyle(r.style);
									aa < A && A < Y.getOriSize(r.text).width
											? (v.label.text = t, m.labelTextWidth = 0)
											: (m.labelTextWidth = aa, n = Y
													.getSmartText(r.text, aa
																	- 4, f, T), aa = n.width
													+ 4, m.labelTextWidth = aa, S.h = Math
													.max(S.h, n.height))
								}
						} else {
							ia = M.length;
							N = M.length - 1;
							(c = (M[N].plotObj.value - M[0].plotObj.value) * P)
									? (Da = c * 0.1, h = Math.max(c * 0.2, c
													/ ia))
									: h = Da = g;
							for (m in Q) {
								c = 0;
								for (z = Q[m].length; c < z;) {
									for (pa = c + 1; !Ea(Q[m][c], Q[m][pa]);)
										pa += 1;
									c = pa
								}
							}
							Ca
									&& (O = (Ca.plotObj.value - d.min) * P + C
											- Ca.labelTextWidth / 2);
							v = M[0].plotObj;
							if (!Ca || v !== Ca.plotObj) {
								r = v.label;
								if (r.style && r.style !== o)
									o = r.style, Y.setStyle(o);
								z = Y.getOriSize(r.text).width + 4;
								pa = (v.value - d.min) * P + C;
								Ca
										&& (c = O - pa, z = c < z && c > A / 2
												? c * 2
												: 0);
								M[0].labelTextWidth = z;
								z > 0 && (y = pa - z / 2);
								y < O && (O = y)
							}
							if (q)
								z = q.labelTextWidth, ca = (d.max - q.plotObj.value)
										* P + L - z / 2;
							v = M[N].plotObj;
							if (!q || v !== q.plotObj) {
								r = v.label;
								if (r.style && r.style !== o)
									o = r.style, Y.setStyle(o);
								z = Y.getOriSize(r.text).width + 4;
								pa = (d.max - v.value) * P + L;
								q
										&& (c = pa - ca, z = c < z && c > A / 2
												? c * 2
												: 0);
								M[N].labelTextWidth = z;
								z > 0 && (y = pa - z / 2);
								y < ca && (ca = y)
							}
							pa = O < 0 ? -O : 0;
							ca = ca < 0 ? -ca : 0;
							c = pa + ca;
							if (c > 0)
								for (m in ea > c
										? (L = (L = ca * g / (ca + g))
												? L + 4
												: 0, e.chart.marginRight += L, g -= L, L = (L = pa
												* g / (pa + g)) ? L + 4 : 0, e.chart.marginLeft += L, g -= L, P = g
												/ (d.max - d.min))
										: pa < ca
												? ea >= ca && aa
														? (L = (L = ca * g
																/ (ca + g)) ? L
																+ 4 : 0, e.chart.marginRight += L, g -= L, P = g
																/ (d.max - d.min))
														: n
																&& (L = (L = pa
																		* g
																		/ (pa + g))
																		? L + 4
																		: 0, e.chart.marginLeft += L, g -= L, P = g
																		/ (d.max - d.min))
												: ea >= pa && n
														? (L = (L = pa * g
																/ (pa + g)) ? L
																+ 4 : 0, e.chart.marginLeft += L, g -= L, P = g
																/ (d.max - d.min))
														: aa
																&& (L = (L = ca
																		* g
																		/ (ca + g))
																		? L + 4
																		: 0, e.chart.marginRight += L, g -= L, P = g
																		/ (d.max - d.min)), L = e.chart.marginRight, C = e.chart.marginLeft, c = (M[N].plotObj.value - M[0].plotObj.value)
										* P, Da = c * 0.1, h = Math.max(
										c * 0.2, c / ia), Q) {
									c = 0;
									for (z = Q[m].length; c < z;) {
										for (pa = c + 1; !Ea(Q[m][c], Q[m][pa],
												!0);)
											pa += 1;
										c = pa
									}
									m += 1
								}
							c = 0;
							for (ia = M.length; c < ia; c += 1)
								if (m = M[c], aa = c % ya, v = m.plotObj, v.label)
									if (v.isCat)
										m.labelTextWidth && ($[aa] = m);
									else {
										y = (n = $[aa]) ? n.nextCat : Q[aa]
												? Q[aa][0]
												: null;
										n = null;
										if (c >= ya) {
											aa = c - ya;
											for (n = M[aa]; !n.labelTextWidth;)
												if (aa >= ya)
													aa -= ya, n = M[aa];
												else {
													n = null;
													break
												}
										}
										aa = n ? n.rightEdge : d.min * P - C;
										y = y ? y.leftEdge : d.max * P + L;
										r = v.label;
										if (r.style && r.style !== o)
											o = r.style, Y.setStyle(o);
										z = Y.getOriSize(r.text).width + 4;
										ea = v.value * P - z / 2;
										if (l.isBar && c == ia - 1 && n) {
											if (aa > ea)
												n.plotObj.label.text = t, n.labelTextWidth = 0, aa = n.leftEdge
										} else if (aa > ea || y < ea + z) {
											v.label.text = t;
											m.labelTextWidth = 0;
											continue
										}
										aa = Math.max(aa, ea);
										pa = v.value * P;
										aa = 2 * Math.min(pa - aa, y - pa);
										r = v.label;
										r.style && r.style !== o
												&& Y.setStyle(r.style);
										aa < A
												&& A < Y.getOriSize(r.text).width
												? (v.label.text = t, m.labelTextWidth = 0)
												: (m.labelTextWidth = aa, n = Y
														.getSmartText(r.text,
																aa - 4, f, T), aa = n.width
														+ 4, m.labelTextWidth = aa, m.leftEdge = pa
														- aa / 2, m.rightEdge = pa
														+ aa / 2, S.h = Math
														.max(S.h, n.height))
									}
							n = L = aa = C = null;
							c = 0;
							for (ia = M.length; c < ia; c += 1)
								if (m = M[c], v = m.plotObj, aa = c % ya, v.isCat
										&& m.labelTextWidth) {
									n = L = null;
									pa = v.value * P;
									if (c >= ya) {
										aa = c - ya;
										for (n = M[aa]; !n.labelTextWidth;)
											if (aa > ya)
												aa -= ya, n = M[aa];
											else {
												n = null;
												break
											}
									}
									n = n ? pa - n.rightEdge : pa - d.min * P
											+ e.chart.marginLeft;
									if (c + ya < ia) {
										C = c + ya;
										for (L = M[C]; !L.labelTextWidth;)
											if (C + ya < ia - 1)
												C += ya, L = M[C];
											else {
												L = null;
												break
											}
									}
									aa = L ? L.leftEdge - pa : d.max * P
											+ e.chart.marginRight - pa;
									aa = Math.min(n, aa) * 2;
									aa > h && (aa = h);
									if (aa > m.oriWidth)
										aa = m.oriWidth;
									m.labelTextWidth = aa;
									r = v.label;
									r.style && r.style !== o
											&& Y.setStyle(r.style);
									n = Y.getSmartText(r.text, aa - 4, f, T);
									m.labelTextWidth = n.width + 4;
									S.h = Math.max(S.h, n.height);
									m.rightEdge = pa + m.labelTextWidth / 2
								}
						}
					else if (ba) {
						c = 0;
						for (ia = M.length; c < ia; c += 1)
							if ((v = M[c].plotObj) && v.label && v.label.text) {
								r = v.label;
								if (r.style && r.style !== o)
									o = r.style, Y.setStyle(o);
								m = 1;
								if (c + m < ia)
									for (L = M[m + c].plotObj; L
											&& (L.value - v.value) * P < A;)
										if (v.isCat) {
											if (L.label) {
												L.label.text = t;
												m += 1;
												if (m + c >= ia - 1)
													break;
												L = h[m + c].plotObj
											}
										} else if (L.isCat) {
											v.label.text = t;
											v = L;
											c += m - 1;
											r = v.label;
											if (r.style && r.style !== o)
												o = r.style, Y.setStyle(o);
											break
										}
								S.w = Math.max(S.w, Y.getOriSize(r.text).width
												+ 4)
							}
					}
				m = 0;
				for (ia = ha.length; m < ia; m += 1)
					if ((v = ha[m].plotObj) && v.label
							&& B(v.label.text) !== void 0) {
						r = v.label;
						if (r.style && r.style !== o)
							o = r.style, Y.setStyle(o);
						n = Y.getOriSize(r.text);
						r.verticalAlign === Xa
								? fa = qa(fa, n.height)
								: ga = qa(ga, n.height)
					}
			}
			if (K) {
				if (ea = V, ba)
					ea = S.w
			} else
				ea = ba ? S.w : E ? ya * V : S.h;
			ea > 0 && (Ia += R + ea);
			G > 0 && (Ia += G + ma);
			S = ga + Ia + 2;
			y = 0;
			S > f
					&& (c = S - f, ma > c
							? (ma -= c, c = 0)
							: (c -= ma, ma = 0, R > c
									? (R -= c, c = 0)
									: (c -= R, R = 0)), ga > c
							? (ga -= c, c = 0)
							: (ga > 0 && (c -= ga, ga = 0), c > 0
									&& (fa > c
											? (fa -= c, c = 0)
											: (fa > 0 && (c -= fa, fa = 0), c > 0
													&& ((y = G - F) > c
															? (G -= c, c = 0)
															: (c -= y, G = F, c > 0
																	&& ((y = ea
																			- V) > c
																			? (ea -= c, c = 0)
																			: (c -= y, ea = V, c > 0
																					&& (c -= G
																							+ ma, G = 0, c > 0
																							&& (c -= ea, ea = 0, c > 0
																									&& (R -= c)))))))))));
			R += W;
			var L = l.is3d ? -e.chart.xDepth : 0, f = ea + R, Fa, Ia = L;
			C = V * 0.5;
			F = V + R;
			ia = M.length;
			S = 0;
			if (wa)
				if (ba) {
					za = Ua;
					Fa = Z ? R + 8 : R + 4;
					ia = M.length;
					for (m = 0; m < ia; m += 1)
						if ((v = M[m].plotObj) && v.label
								&& B(v.label.text) !== void 0) {
							r = v.label;
							if (r.style && r.style !== o)
								o = r.style, Y.setStyle(o);
							c = 1;
							n = Y.getSmartText(r.text, ea - 4, A, T);
							r.text = n.text;
							Ia = L + C / 2;
							r.y = Fa;
							r.x = Ia;
							r.rotation = ba;
							r.textAlign = za;
							S += 1
						}
				} else {
					wa = ea;
					za = La;
					Fa = F;
					for (m = 0; m < ia; m += D)
						if ((v = M[m].plotObj) && v.label
								&& B(v.label.text) !== void 0) {
							r = v.label;
							if (r.style && r.style !== o)
								o = r.style, Y.setStyle(o);
							if (!K)
								n = Y.getSmartText(r.text, M[m].labelTextWidth
												- 4, wa, T), r.text = n.text, E
										&& (Fa = F + S % ya * V);
							r.y = Fa;
							r.x = Ia;
							r.rotation = ba;
							r.textAlign = za;
							S += 1
						}
				}
			else {
				ba ? (wa = za, c = ea - 4, za = Ua, Fa = Z ? R + 8 : R + 4) : E
						? (wa = V, c = za * ya - 4, za = La)
						: (wa = ea, c = za - 4, za = La, Fa = F);
				for (m = 0; m < ia; m += D)
					if ((v = M[m]) && v.label && B(v.label.text) !== void 0) {
						r = v.label;
						if (r.style && r.style !== o)
							o = r.style, Y.setStyle(o);
						if (!K)
							n = Y.getSmartText(r.text, c, wa, T), r.text = n.text, E
									&& (Fa = F + S % ya * V), ba
									&& (Ia = L + C / 2);
						r.y = Fa;
						r.x = Ia;
						r.rotation = ba;
						r.textAlign = za;
						S += 1
					}
				j._labelY = F;
				j._labelX = L;
				j._yShipment = Fa;
				j._isStagger = E;
				j._rotation = ba;
				j._textAlign = za;
				j._adjustedPx = C / 2;
				j._staggerLines = ya;
				j._labelHeight = V
			}
			ia = ha.length;
			for (m = ba = j = 0; m < ia; m += 1)
				if ((v = ha[m].plotObj ? ha[m].plotObj : ha[m]) && v.label
						&& B(v.label.text) !== void 0) {
					r = v.label;
					if (r.style && r.style !== o)
						o = r.style, Y.setStyle(o);
					r.verticalAlign === Xa
							? (n = Y.getSmartText(r.text, g, fa, !0), ba = Math
									.max(ba, n.height), r.text = n.text, r.y = f
									+ Y.getOriSize("W").height, r.x = Ia)
							: (n = Y.getSmartText(r.text, g, ga, !0), j = Math
									.max(j, n.height), r.text = n.text, r.y = -(ga
									- Y.getOriSize("W").height + R + 2))
				}
			if (G > 0)
				Y.setStyle(d.title.style), q = Y.getSmartText(d.title.text, g,
						G), d.title.text = q.text, d.title.margin = f + ba + ma;
			Ia = ba;
			if (ea > 0)
				l.horizontalAxisHeight = R + ea - W, Ia += l.horizontalAxisHeight;
			G > 0 && (Ia += G + ma);
			e.chart.marginBottom += Ia;
			j > 0 && (e.chart.marginTop += j, Ia += j);
			return Ia
		}, P = function(d, j, p, c, g) {
			var c = d.legend, h = d.chart, s = h.paletteIndex, l = h.is3D
					? ga.chart3D
					: ga.chart2D, n = h.useRoundEdges, v = a(j.legendiconscale,
					1), o = (parseInt(c.itemStyle.fontSize, 10) || 10) + 1, B = d.chart.defaultSeriesType, r = 3;
			if (v <= 0 || v > 5)
				v = 1;
			c.padding = 4;
			o <= 0 && (o = 1);
			g -= 8;
			o *= v;
			r *= v;
			o = Math.min(o, g);
			o <= 0 && (r = o = 0);
			c.symbolWidth = o;
			c.symbolPadding = r;
			c.textPadding = 4;
			c.legendHeight = g = o + 2 * r;
			c.rowHeight = Math.max(parseInt(c.itemStyle.lineHeight, 10) || 12,
					g);
			p
					? (c.align = Ua, c.verticalAlign = "middle", c.layout = "vertical")
					: c.x = (h.marginLeft - h.spacingLeft - h.marginRight + h.spacingRight)
							/ 2;
			p = e(j.legendbordercolor, f[l.legendBorderColor][s]);
			g = a(j.legendborderalpha, 100);
			h = a(j.legendbgalpha, 100);
			c.backgroundColor = $(e(j.legendbgcolor, f[l.legendBgColor][s]), h);
			c.borderColor = $(p, g);
			c.borderWidth = a(j.legendborderthickness, !n
							|| j.legendbordercolor ? 1 : 0);
			c.shadow = Boolean(a(j.legendshadow, 1));
			if (c.shadow)
				c.shadow = {
					enabled : c.shadow,
					opacity : qa(g, h) / 100
				};
			c.reversed = Boolean(a(j.reverselegend, 0));
			if (/^pie|pie3d$/.test(B))
				c.reversed = !c.reversed;
			c.style = {
				padding : 4
			};
			Boolean(a(j.interactivelegend, 1))
					? c.symbolStyle = {
						_cursor : "hand",
						cursor : "pointer"
					}
					: (d.plotOptions.series.events.legendItemClick = wa, c.itemStyle.cursor = "default", c.itemHoverStyle = {
						cursor : "inherit"
					});
			c.borderRadius = a(j.legendborderradius, n ? 3 : 0);
			c.legendAllowDrag = Boolean(a(j.legendallowdrag, 0));
			c.title.text = A(D(j.legendcaption, t));
			c.legendScrollBgColor = m(e(j.legendscrollbgcolor,
					f.altHGridColor[d.chart.paletteIndex]));
			c.legendScrollBarColor = e(j.legendscrollbarcolor, p);
			c.legendScrollBtnColor = e(j.legendscrollbtncolor, p);
			c.title.style = q({
						fontWeight : "bold"
					}, c.itemStyle)
		}, qb = h.placeLegendBlockRight = function(d, e, f, c, g) {
			P(d, e.chart, !0, g, f);
			var h = 0, s = d.series, m, n, v = d[J].smartLabel, l = d.legend, o, r = l.textPadding, q = l.title.padding, A = l.symbolWidth
					+ 2 * l.symbolPadding, B = c * 2, C = 0, e = a(
					e.chart.legendpadding, 7), y = 2 * l.padding, z = {
				width : y,
				height : y
			};
			f -= y;
			g && (s = s && s[0] && s[0].data);
			if (typeof s === na || typeof s.length === na)
				return 0;
			else
				m = s.length;
			o = f - A - 2 - r;
			o < 0 && (o = 0);
			for (v.setStyle(l.itemStyle); h < m; h += 1)
				if (n = s[h], n.showInLegend !== !1)
					o === 0
							? (z.height += A, n.name = t)
							: (g = v.getSmartText(n.name, o, B), n.name = g.text, z.height += Math
									.max(g.height, A), C = Math.max(g.width, C));
			l.width = C + A + 2 + r + y;
			if (l.title.text !== t) {
				v.setStyle(l.title.style);
				g = v.getSmartText(l.title.text, f, B);
				l.title.text = g.text;
				h = g.width + y;
				if (l.width < h)
					l.initialItemX = (h - l.width) / 2, l.width = h;
				z.height += g.height + q
			}
			l.height = l.totalHeight = z.height;
			if (l.height > c)
				l.height = c, l.scroll.enabled = !0, l.width += (l.scroll.scrollBarWidth = 10)
						+ (l.scroll.scrollBarPadding = 2);
			e = Math.min(l.width + e, f);
			d.chart.marginRight += e;
			return e
		}, Nb = h.placeLegendBlockBottom = function(d, e, f, c, g) {
			P(d, e.chart, !1, g, f);
			var h = 0, s = d.series, l = d[J].smartLabel, n = d.legend, m, o, q = n.textPadding, r = n.title.padding, A = n.symbolPadding;
			o = n.legendHeight;
			var B = e.chart, y = 0, C = c * 2, z = n.rowHeight, D = [], G = a(
					B.minimisewrappinginlegend, 0), B = a(parseInt(
							B.legendnumcolumns, 10), 0), V = 0, F = 0, E = 0, S = m = 0, T = 2
					* n.padding, e = a(e.chart.legendpadding, 7), Q = {
				width : T,
				height : T
			};
			B < 0 && (B = 0);
			f -= T;
			l.setStyle(n.itemStyle);
			m = l.getSmartText(N).height;
			e = Math.min(e, c - m - 8);
			c -= e;
			g && (s = s && s[0] && s[0].data);
			if (typeof s === na || typeof s.length === na)
				return 0;
			else
				g = s.length;
			for (l.setStyle(n.itemStyle); h < g; h += 1)
				s[h].showInLegend !== !1
						&& (m = l.getOriSize(s[h].name), V = Math.max(V,
								m.width), F += m.width, E += 1);
			m = F / E;
			m += o + 2 + q;
			V += o + 2 + q;
			B > 0 && E < B && (B = E);
			B > 0 && (S = f / B) > m ? S > V && (S = V) : f > V
					&& (G || m * 1.5 > V) ? (B = Math.floor(f / V), E < B
					&& (B = E), S = V) : f >= 2 * m
					? (B = Math.floor(f / m), E < B && (B = E), S = Math
							.floor(f / B), S > V && (S = V))
					: (B = 1, S = f);
			n.itemWidth = S;
			o = S - o - 2 - q;
			o < 0 && (A = o = q = 0);
			n.symbolPadding = A;
			n.textPadding = q;
			n.width = S * B + T;
			if (n.title.text !== t) {
				l.setStyle(n.title.style);
				m = l.getSmartText(n.title.text, f, C);
				n.title.text = m.text;
				h = m.width + T;
				if (n.width < h)
					n.initialItemX = (h - n.width) / 2, n.width = h;
				y = m.height + r
			}
			l.setStyle(n.itemStyle);
			r = 0;
			if (n.reversed)
				for (h = g - 1; h >= 0; h -= 1) {
					if (f = s[h], f.showInLegend !== !1) {
						if (o === 0)
							D[r] = !0, f.name = t;
						else {
							m = l.getSmartText(f.name, o, C);
							for (f.name = m.text; D[r] === !0;)
								r += 1;
							f = m.height / z;
							A = r;
							for (q = 0; q < f; q += 1, A += B)
								D[A] = !0
						}
						r += 1
					}
				}
			else
				for (h = 0; h < g; h += 1)
					if (f = s[h], f.showInLegend !== !1) {
						if (o === 0)
							D[r] = !0, f.name = t;
						else {
							m = l.getSmartText(f.name, o, C);
							for (f.name = m.text; D[r] === !0;)
								r += 1;
							f = m.height / z;
							A = r;
							for (q = 0; q < f; q += 1, A += B)
								D[A] = !0
						}
						r += 1
					}
			Q.height += Math.ceil(D.length / B) * z + y;
			n.height = n.totalHeight = Q.height;
			n.rowHeight = z;
			n.legendNumColumns = B;
			if (n.height > c)
				n.height = c, n.scroll.enabled = !0, n.width += (n.scroll.scrollBarWidth = 10)
						+ (n.scroll.scrollBarPadding = 2);
			e += n.height;
			d.chart.marginBottom += e;
			return e
		}, Cb = function(a, e) {
			return a.value - e.value
		}, Kb = h.adjustVerticalAxisTitle = function(a, e, f) {
			if (e && e.text) {
				var c = e.text, g = a[J].smartLabel, h = 2
						* Math.min(a.chart.marginTop, a.chart.marginBottom) + f, s = f
						+ a.chart.marginTop + a.chart.marginBottom;
				e.style && g.setStyle(e.style);
				c = g.getOriSize(c);
				if (e.rotation == "0") {
					if (c.height > h)
						e.y = (s / 2 - (f / 2 + a.chart.marginTop)) / 2
				} else if (c.width > h)
					e.y = s / 2 - (f / 2 + a.chart.marginTop)
			}
		}, Ob = h.adjustVerticalCanvasMargin = function(d, e, f, c) {
			var g = e.chart, h = e = 0, s = 0, l = a(g.canvastopmargin, 0), g = a(
					g.canvasbottommargin, 0), n = l / (l + g), m = d.chart.marginTop, o = d.chart.marginBottom;
			g > o && (e += g - o);
			l > m && (e += l - m);
			e > f ? l > m && g > o ? (h = f * n, s = f * (1 - n)) : l > m
					? h = f
					: s = f : e > 0
					&& (g > o && (s = g - o), l > m && (h = l - m));
			h && (d.chart.marginTop += h);
			s
					&& (d.chart.marginBottom += s, c && c.title
							&& (c.title.margin += s));
			return h + s
		}, Vb = h.adjustHorizontalCanvasMargin = function(d, e, f, c, g) {
			var h = e.chart, e = a(h.canvasleftmargin, 0), h = a(
					h.canvasrightmargin, 0), s = e / (e + h), l = 0, n = d.chart.marginLeft, m = d.chart.marginRight, o = 0, q = 0;
			e > n && (l += e - n);
			h > m && (l += h - m);
			l > f ? e > n && h > m ? (o = f * s, q = f * (1 - s)) : h > m
					? q = f
					: o = f : l > 0
					&& (e > n && (o = e - n), h > m && (q = h - m));
			o
					&& (d.chart.marginLeft += o, c && c.title
							&& (c.title.margin += o));
			q
					&& (d.chart.marginRight += q, g && g.title
							&& (g.title.margin += q));
			return q + o
		};
		E("base", {
			useScaleRecursively : !0,
			tooltipConstraint : "chart",
			draw : function(a, e) {
				var f = this, c = new Date;
				f.drawingLatency = f.drawingLatency || 0;
				return new Dc.Chart(a, function() {
							f.drawingLatency = new Date - c;
							e && e.apply(this, arguments)
						})
			},
			init : function(d, e, f) {
				var c = this.chartInstance || f, g = c.jsVars, f = g._reflowData
						|| (g._reflowData = {}), w, s;
				this.dataObj = e = q({}, e);
				s = e.chart = e.chart || e.graph;
				delete e.graph;
				if (f && !this.stateless)
					w = f.hcJSON, delete f.hcJSON, q(this, f, !0), this.preReflowAdjustments
							&& this.preReflowAdjustments.call(this), f.hcJSON = w;
				if (!s)
					return {
						series : []
					};
				this.containerElement = d;
				this.config = {};
				this.smartLabel = new kc(c.id, document
								.getElementsByTagName("body")[0]
								|| d, a(s.useellipseswhenoverflow,
								s.useellipsewhenoverflow, 1));
				this.linkClickFN = fc(e, c);
				this.numberFormatter = new ec(e.chart, this);
				if (!this.standaloneInit)
					return new h.createDialog(d, g.msgStore.ChartNotSupported);
				d = this.chart(d.offsetWidth || parseFloat(d.style.width),
						d.offsetHeight || parseFloat(d.style.height), c);
				f
						&& !this.stateless
						&& (f.hcJSON && q(d, f.hcJSON, !0), this.postReflowAdjustments
								&& this.postReflowAdjustments.call(this));
				return d
			},
			chart : function(d, j) {
				var h = this.name, c = this.dataObj, g = c.chart, w, s, l, n, v, o, y = this.defaultSeriesType, r, z, D, E, C, K, ba, G;
				w = Qb(c, d, j, this);
				G = w.chart;
				ba = w.xAxis;
				r = w[J];
				this.realtimeEnabled && this.postHCJSONCreation
						&& this.postHCJSONCreation.call(this, w);
				w.labels.smartLabel = o = r.smartLabel = this.smartLabel;
				r.width = d;
				r.height = j;
				z = w.plotOptions;
				r.isDual = this.isDual;
				r.numberFormatter = this.numberFormatter;
				r.axisGridManager = new Z(y, g);
				G.is3D = s = r.is3d = /3d$/.test(y);
				G.isBar = n = r.isBar = this.isBar;
				l = /^pie/.test(y);
				K = g.useroundedges == 1;
				C = s ? ga.chart3D : ga.chart2D;
				G.events.click = w.plotOptions.series.point.events.click = this.linkClickFN;
				G.defaultSeriesType = y;
				var V = g.palette > 0 && g.palette < 6 ? g.palette : a(
						this.paletteIndex, 1);
				V -= 1;
				G.paletteIndex = V;
				G.usePerPointLabelColor = g.colorlabelsfromplot == hb;
				G.useRoundEdges = K && !s && !this.distributedColumns
						&& this.defaultSeriesType !== "pie";
				if (e(g.clickurl) !== void 0)
					G.link = g.clickurl, G.style.cursor = "pointer", w.plotOptions.series.point.events.click = function() {
						G.events.click.call({
									link : g.clickurl
								})
					};
				var N = e(g.basefont, "Verdana"), P = Ca(g.basefontsize, 10), S = e(
						g.basefontcolor, f[C.baseFontColor][V]);
				D = e(g.outcnvbasefont, N);
				var T = Ca(g.outcnvbasefontsize, P), O = T + Wa, R = e(
						g.outcnvbasefontcolor, S).replace(/^#?([a-f0-9]+)/ig,
						"#$1"), W;
				P += Wa;
				S = S.replace(/^#?([a-f0-9]+)/ig, "#$1");
				r.trendStyle = r.outCanvasStyle = {
					fontFamily : D,
					color : R,
					fontSize : O
				};
				v = zb(r.trendStyle);
				r.inCanvasStyle = {
					fontFamily : N,
					fontSize : P,
					color : S
				};
				W = zb(r.inCanvasStyle);
				r.divlineStyle = {
					fontFamily : N,
					fontSize : P,
					color : S,
					lineHeight : W
				};
				ba.labels.style = {
					fontFamily : D,
					fontSize : O,
					lineHeight : v,
					color : R
				};
				ba.steppedLabels.style = {
					fontFamily : D,
					fontSize : O,
					lineHeight : v,
					color : R,
					visibility : "hidden"
				};
				w.yAxis[0].labels.style = {
					fontFamily : D,
					fontSize : O,
					lineHeight : v,
					color : R
				};
				w.yAxis[1].labels.style = {
					fontFamily : D,
					fontSize : O,
					lineHeight : v,
					color : R
				};
				w.legend.itemStyle = {
					fontFamily : D,
					fontSize : O,
					lineHeight : v,
					color : R
				};
				w.legend.itemHiddenStyle = {
					fontFamily : D,
					fontSize : O,
					lineHeight : v
				};
				w.plotOptions.series.dataLabels.style = {
					fontFamily : N,
					fontSize : P,
					lineHeight : W,
					color : S
				};
				w.plotOptions.series.dataLabels.color = w.plotOptions.series.dataLabels.style.color;
				w.tooltip.style = {
					fontFamily : N,
					fontSize : P,
					lineHeight : W,
					color : S
				};
				w.title.style = {
					fontFamily : D,
					color : R,
					fontSize : T + 3 + Wa,
					fontWeight : "bold"
				};
				zb(w.title.style);
				w.subtitle.style = {
					fontFamily : D,
					color : R,
					fontSize : T + a(this.subTitleFontSizeExtender, 1) + Wa,
					fontWeight : B(this.subTitleFontWeight, "bold")
				};
				zb(w.subtitle.style);
				ba.title.style = {
					fontFamily : D,
					color : R,
					fontSize : O,
					fontWeight : "bold"
				};
				N = zb(ba.title.style);
				w.yAxis[0].title.style = {
					fontFamily : D,
					color : R,
					fontSize : O,
					lineHeight : N,
					fontWeight : "bold"
				};
				w.yAxis[1].title.style = {
					fontFamily : D,
					color : R,
					fontSize : O,
					lineHeight : N,
					fontWeight : "bold"
				};
				w.orphanStyles = {
					defaultStyle : {
						style : q({}, r.inCanvasStyle)
					}
				};
				this.parseStyles(w);
				delete w.xAxis.labels.style.backgroundColor;
				delete w.xAxis.labels.style.borderColor;
				delete w.yAxis[0].labels.style.backgroundColor;
				delete w.yAxis[0].labels.style.borderColor;
				delete w.yAxis[1].labels.style.backgroundColor;
				delete w.yAxis[1].labels.style.borderColor;
				r.showTooltip = a(g.showtooltip, this.showtooltip, 1);
				r.tooltipSepChar = e(g.tooltipsepchar, Ab);
				r.showValues = a(g.showvalues, this.showValues, 1);
				r.seriesNameInToolTip = a(g.seriesnameintooltip, 1);
				r.showVLines = a(g.showvlines, 1);
				r.showVLineLabelBorder = a(g.showvlinelabelborder, 1);
				r.rotateVLineLabels = a(g.rotatevlinelabels, 0);
				r.vLineColor = e(g.vlinecolor, "333333");
				r.vLineThickness = e(g.vlinethickness, 1);
				r.vLineAlpha = a(g.vlinealpha, 80);
				r.vLineLabelBgColor = e(g.vlinelabelbgcolor, "ffffff");
				r.vLineLabelBgAlpha = a(g.vlinelabelbgalpha, s ? 50 : 100);
				r.trendlineColor = e(g.trendlinecolor, "333333");
				r.trendlineThickness = e(g.trendlinethickness, 1);
				r.trendlineAlpha = a(g.trendlinealpha);
				r.showTrendlinesOnTop = e(g.showtrendlinesontop, 0);
				r.trendlineValuesOnOpp = e(g.trendlinevaluesonopp,
						g.trendlinevaluesonright, 0);
				r.trendlinesAreDashed = a(g.trendlinesaredashed, 0);
				r.trendlinesDashLen = a(g.trendlinedashlen, 5);
				r.trendlinesDashGap = a(g.trendlinedashgap, 2);
				r.showTrendlines = e(g.showtrendlines, "1");
				r.showTrendlinesLabels = a(g.showtrendlinelabel,
						this.showTrendlineLabel, 1);
				w.plotOptions.series.connectNullData = a(g.connectnulldata, 0);
				G.backgroundColor = {
					FCcolor : {
						color : e(g.bgcolor, f[C.bgColor][V]),
						alpha : e(g.bgalpha, f[C.bgAlpha][V]),
						angle : e(g.bgangle, f[C.bgAngle][V]),
						ratio : e(g.bgratio, f[C.bgRatio][V])
					}
				};
				G.rotateValues = a(g.rotatevalues, 0);
				G.placeValuesInside = a(g.placevaluesinside, 0);
				G.valuePosition = e(g.valueposition, "auto");
				G.valuePadding = a(g.valuepadding, 2);
				G.borderColor = $(e(g.bordercolor, s
										? "#666666"
										: f.borderColor[V]), e(g.borderalpha, s
										? "100"
										: f.borderAlpha[V]));
				D = a(g.showborder, s ? 0 : 1);
				G.borderWidth = D ? a(g.borderthickness, 1) : 0;
				G.plotBorderColor = $(e(g.canvasbordercolor,
								f.canvasBorderColor[V]), e(g.canvasborderalpha,
								f.canvasBorderAlpha[V]));
				E = Boolean(e(g.canvasborderthickness, K ? 0 : 1));
				G.plotBorderWidth = s || !E ? 0 : a(g.canvasborderthickness,
						this.canvasborderthickness, G.useRoundEdges ? 1 : 2);
				G.bgSWF = e(g.bgimage, g.bgswf);
				G.bgSWFAlpha = a(g.bgimagealpha, g.bgswfalpha, 100);
				K = e(g.bgimagedisplaymode, "none").toLowerCase();
				D = B(g.bgimagevalign, t).toLowerCase();
				O = B(g.bgimagehalign, t).toLowerCase();
				K == "tile" || K == "fill" || K == "fit"
						? (D != vb && D != F && D != Xa && (D = F), O != Q
								&& O != F && O != Ua && (O = F))
						: (D != vb && D != F && D != Xa && (D = vb), O != Q
								&& O != F && O != Ua && (O = Q));
				G.bgImageDisplayMode = K;
				G.bgImageVAlign = D;
				G.bgImageHAlign = O;
				G.bgImageScale = a(g.bgimagescale, 100);
				G.logoURL = B(g.logourl);
				G.logoPosition = e(g.logoposition, "tl").toLowerCase();
				G.logoAlpha = a(g.logoalpha, 100);
				G.logoLink = B(g.logolink);
				G.logoScale = a(g.logoscale, 100);
				G.logoLeftMargin = a(g.logoleftmargin, 0);
				G.logoTopMargin = a(g.logotopmargin, 0);
				P = e(g.divlinecolor, f[C.divLineColor][V]);
				N = e(g.divlinealpha, s
								? f.divLineAlpha3D[V]
								: f.divLineAlpha[V]);
				K = a(g.divlinethickness, 1);
				D = Boolean(a(g.divlineisdashed, this.divLineIsDashed, 0));
				O = a(g.divlinedashlen, 4);
				R = a(g.divlinedashgap, 2);
				w.yAxis[0].gridLineColor = $(P, N);
				w.yAxis[0].gridLineWidth = K;
				w.yAxis[0].gridLineDashStyle = D ? ma(O, R, K) : void 0;
				w.yAxis[0].alternateGridColor = n
						? $(e(g.alternatevgridcolor, f.altVGridColor[V]), a(
										g.showalternatevgridcolor, 1) === 1
										? e(g.alternatevgridalpha,
												f.altVGridAlpha[V])
										: Va)
						: $(e(g.alternatehgridcolor, f.altHGridColor[V]),
								g.showalternatehgridcolor == 0 ? 0 : e(
										g.alternatehgridalpha,
										f.altHGridAlpha[V]));
				S = a(g.vdivlinethickness, 1);
				T = Boolean(a(g.vdivlineisdashed, 0));
				v = a(g.vdivlinedashlen, 4);
				W = a(g.vdivlinedashgap, 2);
				ba.gridLineColor = $(e(g.vdivlinecolor, f[C.divLineColor][V]),
						e(g.vdivlinealpha, f.divLineAlpha[V]));
				ba.gridLineWidth = S;
				ba.gridLineDashStyle = T ? ma(v, W, S) : void 0;
				ba.alternateGridColor = $(e(g.alternatevgridcolor,
								f.altVGridColor[V]),
						g.showalternatehgridcolor === "1" ? e(
								g.alternatevgridalpha, f.altVGridAlpha[V]) : 0);
				var S = e(g.canvasbgcolor, f[C.canvasBgColor][V]), Ba, T = e(
						g.canvasbgalpha, f.canvasBgAlpha[V]);
				e(g.showcanvasbg, hb) == Va && (T = "0");
				w.plotOptions.series.shadow = a(g.showshadow,
						g.showcolumnshadow, this.defaultPlotShadow,
						f.showShadow[V]);
				if (this.inversed)
					w.yAxis[0].reversed = !0, w.yAxis[1].reversed = !0;
				if (this.isStacked)
					this.distributedColumns
							? (r.showStackTotal = Boolean(a(g.showsum, 1)), v = a(
									g.usepercentdistribution, 1), W = a(
									g.showpercentvalues, 0), Ba = a(
									g.showpercentintooltip, 1), r.showXAxisPercentValues = a(
									g.showxaxispercentvalues, 1))
							: (r.showStackTotal = Boolean(a(this.showSum,
									g.showsum, 0)), v = a(this.stack100percent,
									g.stack100percent, 0), W = a(
									g.showpercentvalues, v), Ba = a(
									g.showpercentintooltip, W)), r.showPercentValues = W, r.showPercentInToolTip = Ba, v
							? (r.isValueAbs = !0, z[y].stacking = "percent", r[0].stacking100Percent = !0)
							: z[y].stacking = "normal";
				if (this.isDual) {
					if (g.primaryaxisonleft === "0")
						w.yAxis[0].opposite = !0, w.yAxis[1].opposite = !1;
					w.yAxis[0].showAlways = !0;
					w.yAxis[1].showAlways = !0
				}
				if (G.useRoundEdges) {
					w.plotOptions.series.shadow = a(g.showshadow,
							g.showcolumnshadow, 1);
					w.plotOptions.series.borderRadius = 1;
					w.tooltip.borderRadius = 2;
					G.plotBorderRadius = 3;
					if (!E)
						G.plotBorderWidth = 0;
					G.plotShadow = w.plotOptions.series.shadow ? {
						enabled : !0,
						opacity : T / 100
					} : 0
				}
				w.plotOptions.series.maxColWidth = Math.abs(a(n
								? g.maxbarheight
								: a(g.maxcolwidth, this.maxColWidth), 50))
						|| 1;
				w.title.text = A(g.caption);
				w.subtitle.text = A(g.subcaption);
				if (a(g.showtooltip, this.showtooltip) == 0)
					w.tooltip.enabled = !1;
				y = w.tooltip.style;
				w.tooltip.backgroundColor = $(e(y.backgroundColor,
								g.tooltipbgcolor, f.toolTipBgColor[V]), e(
								g.tooltipbgalpha, 100));
				w.tooltip.borderColor = $(e(y.borderColor,
								g.tooltipbordercolor, f.toolTipBorderColor[V]),
						e(g.tooltipborderalpha, 100));
				y.backgroundColor = void 0;
				y.borderColor = void 0;
				y.border = void 0;
				w.tooltip.shadow = g.showtooltipshadow == hb ? {
					enabled : !0,
					opacity : a(qa(g.tooltipbgalpha, g.tooltipborderalpha), 100)
							/ 100
				}
						: !1;
				w.tooltip.borderWidth = a(g.tooltipborderthickness, 1);
				if (g.tooltipborderradius)
					w.tooltip.borderRadius = a(g.tooltipborderradius, 1);
				w.tooltip.style.padding = a(g.tooltippadding,
						this.tooltippadding, 4);
				if (g.tooltipcolor)
					y.color = m(g.tooltipcolor);
				y = a(g.plotspacepercent, 20);
				if (y > 80 || y < 0)
					y = 20;
				r.plotSpacePercent = w.plotOptions.series.groupPadding = y
						/ 200;
				s && !l
						? (G.series2D3Dshift = h === "mscombi3d"
								? !0
								: Boolean(a(g.use3dlineshift, 0)), G.canvasBaseColor3D = e(
								g.canvasbasecolor, f.canvasBaseColor3D[V]), G.canvasBaseDepth = a(
								g.canvasbasedepth, 10), G.canvasBgDepth = a(
								g.canvasbgdepth, 3), G.showCanvasBg = Boolean(a(
								g.showcanvasbg, 1)), G.showCanvasBase = Boolean(a(
								g.showcanvasbase, 1)), n
								? (G.xDepth = 5, G.yDepth = 5, G.showCanvasBg
										&& (r.marginTopExtraSpace += G.canvasBgDepth), r.marginLeftExtraSpace += G.yDepth
										+ (G.showCanvasBase
												? G.canvasBaseDepth
												: 0), r.marginBottomExtraSpace += 5)
								: (G.xDepth = 10, G.yDepth = 10, G.showCanvasBg
										&& (r.marginRightExtraSpace += G.canvasBgDepth), r.marginBottomExtraSpace += G.yDepth
										+ (G.showCanvasBase
												? G.canvasBaseDepth
												: 0)), S = S.split(fa)[0], T = T
								.split(fa)[0], G.use3DLighting = Boolean(a(
								g.use3dlighting, 1)), G.plotBackgroundColor = G.use3DLighting
								? {
									FCcolor : {
										color : Bb(S, 85) + fa + kb(S, 55),
										alpha : T + fa + T,
										ratio : rb,
										angle : $a(
												d
														- (G.marginLeft + G.marginRight),
												j
														- (G.marginTop + G.marginBottom),
												1)
									}
								}
								: $(S, T), G.canvasBgColor = $(Bb(S, 80), T), l = e(
								g.zeroplanecolor, g.divlinecolor,
								f[C.divLineColor][V]), n = e(g.zeroplanealpha,
								g.divlinealpha, f.divLineAlpha[V]), G.zeroPlaneColor = $(
								l, n), G.zeroPlaneBorderColor = $(e(
										g.zeroplanebordercolor, l), a(
										g.zeroplaneshowborder, 1) ? n : 0))
						: (G.is3D = !1, G.plotBackgroundColor = {
							FCcolor : {
								color : S,
								alpha : T,
								angle : e(g.canvasbgangle, f.canvasBgAngle[V]),
								ratio : e(g.canvasbgratio, f.canvasBgRatio[V])
							}
						});
				this.parseExportOptions(w);
				this.preSeriesAddition && this.preSeriesAddition(w, c, d, j);
				this.series && this.series(c, w, h, d, j);
				this.postSeriesAddition(w, c, d, j);
				this.spaceManager(w, c, d, j);
				h = a(g.drawquadrant, 0);
				if (r.isXYPlot
						&& h
						&& (W = ba.min, E = ba.max, z = w.yAxis[0].min, S = w.yAxis[0].max, Ba = a(
								g.quadrantxval, (W + E) / 2), T = a(
								g.quadrantyval, (z + S) / 2), T >= z && T <= S
								&& Ba >= W && Ba <= E)) {
					y = $(e(g.quadrantlinecolor, G.plotBorderColor), e(
									g.quadrantlinealpha, ab));
					v = a(g.quadrantlinethickness, G.plotBorderWidth);
					var ca = a(g.quadrantlineisdashed, 0), ha = a(
							g.quadrantlinedashLen, 4), na = a(
							g.quadrantlinedashgap, 2);
					n = B(g.quadrantlabeltl, t);
					h = B(g.quadrantlabeltr, t);
					c = B(g.quadrantlabelbl, t);
					l = B(g.quadrantlabelbr, t);
					C = a(g.quadrantlabelpadding, 3);
					ca = ca ? ma(ha, na, v) : void 0;
					ba.plotLines.push({
								color : y,
								value : Ba,
								width : v,
								dashStyle : ca,
								zIndex : 3
							});
					w.yAxis[0].plotLines.push({
								color : y,
								value : T,
								width : v,
								dashStyle : ca,
								zIndex : 3
							});
					v = d - G.marginRight - G.marginLeft;
					ca = j - G.marginTop - G.marginBottom;
					y = r.inCanvasStyle;
					ha = parseInt(y.fontSize, 10);
					W = v / (E - W) * (Ba - W);
					E = v - W;
					S = ca / (S - z) * (T - z);
					z = ca - S;
					W -= C;
					E -= C;
					z -= C;
					S -= C;
					T = C + ha + Wa;
					Ba = ca - C + ha + Wa;
					ca = C + Wa;
					C = v - C + Wa;
					o.setStyle(y);
					z > 0
							&& (n !== t
									&& W > 0
									&& (n = o.getSmartText(n, W, z), w.labels.items
											.push({
														html : n.text,
														zIndex : 3,
														style : {
															left : ca,
															top : T,
															fontSize : y.fontSize,
															lineHeight : y.lineHeight,
															fontFamily : y.fontFamily,
															color : y.color
														}
													})), h !== t
									&& E > 0
									&& (n = o.getSmartText(h, E, z), w.labels.items
											.push({
														html : n.text,
														textAlign : Ua,
														zIndex : 3,
														style : {
															left : C,
															top : T,
															fontSize : y.fontSize,
															lineHeight : y.lineHeight,
															fontFamily : y.fontFamily,
															color : y.color
														}
													})));
					S > 0
							&& (c !== t
									&& W > 0
									&& (n = o.getSmartText(c, W, S), w.labels.items
											.push({
														html : n.text,
														vAlign : Xa,
														zIndex : 3,
														style : {
															left : ca,
															top : Ba,
															fontSize : y.fontSize,
															lineHeight : y.lineHeight,
															fontFamily : y.fontFamily,
															color : y.color
														}
													})), l !== t
									&& E > 0
									&& (n = o.getSmartText(l, E, S), w.labels.items
											.push({
														html : n.text,
														textAlign : Ua,
														vAlign : Xa,
														zIndex : 3,
														style : {
															left : C,
															top : Ba,
															fontSize : y.fontSize,
															lineHeight : y.lineHeight,
															fontFamily : y.fontFamily,
															color : y.color
														}
													})))
				}
				if (this.hasVDivLine && (h = a(g.numvdivlines, 0) + 1, h > 1)) {
					r = r.x.catCount - 1;
					o = ba.max;
					h = r / h;
					c = !0;
					l = ba.min;
					var L, P = e(g.vdivlinecolor, P), N = a(g.vdivlinealpha, N), S = a(
							g.vdivlinethickness, K), T = a(g.vdivlineisdashed,
							D);
					v = a(g.vdivlinedashlen, O);
					W = a(g.vdivlinedashgap, R);
					(K = a(g.showalternatevgridcolor, 0))
							&& (L = $(e(g.alternatevgridcolor,
											f.altVGridColor[V]), e(
											g.alternateVGridAlpha,
											f.altVGridAlpha[V])));
					for (V = h; V < r; V += h, c = !c)
						c && K && ba.plotBands.push({
									color : L,
									from : l,
									to : V,
									zIndex : 1
								}), ba.plotLines.push({
									width : S,
									color : $(P, N),
									dashStyle : T ? ma(v, W, S) : void 0,
									value : V,
									zIndex : 1
								}), l = V;
					c && K && ba.plotBands.push({
								color : L,
								from : l,
								to : o,
								zIndex : 1
							})
				}
				if (s && G.xDepth > G.marginLeft)
					G.marginLeft = G.xDepth;
				window.console && window.console.log
						&& window.FC_DEV_ENVIRONMENT && console.log(w);
				return w
			},
			parseExportOptions : function(a) {
				var j = this.dataObj.chart, f = a[J];
				a.exporting.enabled = !0;
				a.exporting.url = e(j.html5exporthandler, a.exporting.url);
				a.exporting.buttons.printButton.enabled = j.showprintmenuitem == "1";
				a.exporting.buttons.exportButton.enabled = j.exportenabled == "1"
						? j.exportshowmenuitem != "0"
						: !1;
				a.exporting.filename = j.exportfilename
						? j.exportfilename
						: "CnbiSoft";
				a.exporting.width = f.width
			},
			defaultSeriesType : t,
			paletteIndex : 1,
			creditLabel : K,
			placeTitle : pb,
			placeLegendBottom : Nb,
			placeLegendRight : qb,
			placeHorizontalAxis : Ea,
			placeVerticalAxis : ca,
			placeHorizontalCanvasMarginAdjustment : Vb,
			placeVerticalCanvasMarginAdjustment : Ob,
			placeHorizontalXYSpaceManager : function(d, j, f, c) {
				var g = d[J], h, s, l, n = j.chart, m, o, q, r, t = g.marginLeftExtraSpace, y = g.marginTopExtraSpace, A = g.marginBottomExtraSpace, C = g.marginRightExtraSpace;
				l = f - (t + C + d.chart.marginRight + d.chart.marginLeft);
				var B = c - (A + d.chart.marginBottom + d.chart.marginTop), z = l
						* 0.3, f = B * 0.3;
				h = l - z;
				c = B - f;
				m = e(n.legendposition, Xa).toLowerCase();
				d.legend.enabled && m === Ua && (h -= qb(d, j, h / 2, B));
				o = a(n.xaxisnamepadding, 5);
				q = a(n.labelpadding, 2);
				r = n.rotatexaxisname !== Va;
				s = g.x;
				s.verticalAxisNamePadding = o;
				s.verticalAxisValuesPadding = q;
				s.rotateVerticalAxisName = r;
				s.verticalAxisNameWidth = a(n.xaxisnamewidth);
				h -= ca(d.xAxis, s, d, j, B, h, !1, !1, l);
				h -= Vb(d, j, h, d.xAxis);
				l = h + z;
				d.legend.enabled && m !== Ua && (c -= Nb(d, j, l, c / 2));
				c -= pb(d, j, l, c / 2);
				s = g[0];
				s.horizontalAxisNamePadding = a(n.yaxisnamepadding, 5);
				s.horizontalLabelPadding = a(n.yaxisvaluespadding, 2);
				s.labelDisplay = "auto";
				s.staggerLines = a(n.staggerlines, 2);
				s.slantLabels = a(n.slantlabels, 0);
				this.xAxisMinMaxSetter(d, j, l);
				c -= this.placeHorizontalAxis(d.yAxis[0], s, d, j, l, c, z);
				c -= Ob(d, j, c, d.yAxis[0]);
				Da(f + c, d, n, d.xAxis, g.x.lYLblIdx, !0);
				Kb(d, d.xAxis.title, c);
				if (d.legend.enabled && m === Ua) {
					j = d.legend;
					g = f + c;
					if (j.height > g)
						j.height = g, j.scroll.enabled = !0, g = (j.scroll.scrollBarWidth = 10)
								+ (j.scroll.scrollBarPadding = 2), j.width += g, d.chart.marginRight += g;
					j.y = 20
				}
				j = (d.chart.marginLeft - a(d.chart.spacingLeft, 0) - (d.chart.marginRight - a(
						d.chart.spacingRight, 0)))
						/ 2;
				g = d.chart.marginLeft - a(d.chart.spacingLeft, 0);
				n = -(d.chart.marginRight - a(d.chart.spacingRight, 0));
				switch (d.title.align) {
					case "left" :
						d.title.x = g;
						break;
					case "right" :
						d.title.x = n;
						break;
					default :
						d.title.x = j
				}
				switch (d.subtitle.align) {
					case "left" :
						d.subtitle.x = g;
						break;
					case "right" :
						d.subtitle.x = n;
						break;
					default :
						d.subtitle.x = j
				}
				d.chart.marginLeft += t;
				d.chart.marginTop += y;
				d.chart.marginBottom += A;
				d.chart.marginRight += C
			},
			placeVerticalXYSpaceManager : function(d, j, f, c) {
				var g = d[J], h, s = !0, l = j.chart, n = !1, m, o, q, r = g.marginLeftExtraSpace, t = g.marginTopExtraSpace, y = g.marginBottomExtraSpace, A = g.marginRightExtraSpace, C = f
						- (r + A + d.chart.marginRight + d.chart.marginLeft), B = c
						- (y + d.chart.marginBottom + d.chart.marginTop), f = C
						* 0.3, c = B * 0.3, z = C - f, C = B - c, D = e(
						l.legendposition, Xa).toLowerCase();
				d.legend.enabled && D === Ua && (z -= qb(d, j, z / 2, B));
				m = a(l.yaxisnamepadding, 5);
				o = a(l.yaxisvaluespadding, 2);
				q = l.rotateyaxisname !== Va;
				if (g.isDual)
					n = !0, h = g[1], h.verticalAxisNamePadding = m, h.verticalAxisValuesPadding = o, h.rotateVerticalAxisName = q, h.verticalAxisNameWidth = a(l.syaxisnamewidth), s = d.yAxis[1].opposite, z -= ca(
							d.yAxis[1], h, d, j, B, z / 2, s, n);
				h = g[0];
				h.verticalAxisNamePadding = m;
				h.verticalAxisValuesPadding = o;
				h.rotateVerticalAxisName = q;
				h.verticalAxisNameWidth = a(n
						? l.pyaxisnamewidth
						: l.yaxisnamewidth);
				z -= ca(d.yAxis[0], h, d, j, B, z, !s, n);
				z -= Vb(d, j, z, d.yAxis[0], d.yAxis[1]);
				s = z + f;
				d.legend.enabled && D !== Ua && (C -= Nb(d, j, s, C / 2));
				C -= pb(d, j, s, C / 2);
				h = g.x;
				h.horizontalAxisNamePadding = a(l.xaxisnamepadding, 5);
				h.horizontalLabelPadding = a(l.labelpadding, 2);
				h.labelDisplay = e(l.labeldisplay, "auto").toLowerCase();
				h.rotateLabels = e(l.rotatelabels, "0") == "1";
				h.staggerLines = a(l.staggerlines, 2);
				h.slantLabels = a(l.slantlabels, l.slantlabel, 0);
				this.xAxisMinMaxSetter(d, j, s);
				C -= this.placeHorizontalAxis(d.xAxis, h, d, j, s, C, f);
				C -= Ob(d, j, C, d.xAxis);
				n
						&& (Da(c + C, d, l, d.yAxis[1], g[1].lYLblIdx), Kb(d,
								d.yAxis[1].title, C));
				Da(c + C, d, l, d.yAxis[0], g[0].lYLblIdx);
				Kb(d, d.yAxis[0].title, C);
				if (d.legend.enabled && D === Ua) {
					j = d.legend;
					g = c + C;
					if (j.height > g)
						j.height = g, j.scroll.enabled = !0, g = (j.scroll.scrollBarWidth = 10)
								+ (j.scroll.scrollBarPadding = 2), j.width += g, d.chart.marginRight += g;
					j.y = 20
				}
				j = (d.chart.marginLeft - a(d.chart.spacingLeft, 0) - (d.chart.marginRight - a(
						d.chart.spacingRight, 0)))
						/ 2;
				g = d.chart.marginLeft - a(d.chart.spacingLeft, 0);
				l = -(d.chart.marginRight - a(d.chart.spacingRight, 0));
				switch (d.title.align) {
					case "left" :
						d.title.x = g;
						break;
					case "right" :
						d.title.x = l;
						break;
					default :
						d.title.x = j
				}
				switch (d.subtitle.align) {
					case "left" :
						d.subtitle.x = g;
						break;
					case "right" :
						d.subtitle.x = l;
						break;
					default :
						d.subtitle.x = j
				}
				d.chart.marginLeft += r;
				d.chart.marginTop += t;
				d.chart.marginBottom += y;
				d.chart.marginRight += A
			},
			placeVerticalAxisTitle : Kb,
			spaceManager : function() {
				return this.placeVerticalXYSpaceManager.apply(this, arguments)
			},
			axisMinMaxSetter : function(d, e, f, c, g, h, s, m) {
				f = e.stacking100Percent ? Xb(99, 1, 100, 0, g, h, s, m) : Xb(
						a(e.max, f), a(e.min, c), f, c, g, h, s, m);
				d.min = Number(l(f.Min, 10));
				d.max = Number(l(f.Max, 10));
				d.tickInterval = Number(l(f.divGap, 10));
				e.numdivlines = Math.round((d.max - d.min) / d.tickInterval)
						- 1;
				if (f.Range / f.divGap <= 2)
					d.alternateGridColor = ha;
				E.highValue = e.max;
				E.lowValue = e.min;
				delete e.max;
				delete e.min
			},
			configurePlotLines : function(d, j, h, c, g, m, s, o, n, v) {
				var q;
				q = h.min;
				var y = h.max, r = h.tickInterval, A = v
						? "xAxis"
						: c.stacking100Percent ? "percentValue" : n
								? "sYAxis"
								: "yAxis", B = q, z = 1, C = h.gridLineColor, D = h.gridLineWidth, E = h.gridLineDashStyle, G = q < 0
						&& y > 0 ? !0 : !1, F = !0, K = 1, O = j[J].axisGridManager, S = j.chart.paletteIndex;
				if (v && !c.catOccupied)
					c.catOccupied = {};
				if (G && (!v || !c.catOccupied[0]))
					v
							? (F = a(d.showvzeroplane, 1), j = a(
									d.vzeroplanethickness, 1), S = j > 0 ? $(e(
											d.vzeroplanecolor, C), e(
											d.vzeroplanealpha, d.vdivlinealpha,
											f.divLineAlpha[S])) : ha)
							: (S = a(d.divlinealpha, f.divLineAlpha[S]), this.defaultZeroPlaneHighlighted === !1
									? (F = a(d.showzeroplane, 1), j = 1)
									: (j = D === 1 ? 2 : D, K = 5, S *= 2), j = a(
									d.zeroplanethickness, j), S = j > 0 ? $(e(
											d.zeroplanecolor, C), e(
											d.zeroplanealpha, S)) : ha), F
							&& (d = a(d.showzeroplanevalue, m) === 1
									? o[A](0)
									: t, O.addAxisGridLine(h, 0, d, j, E, S, K,
									v));
				if (g === 1 && (!v || !c.catOccupied[q]))
					d = o[A](q), O.addAxisGridLine(h, q, d, 0.1, void 0, ha, 1,
							v);
				D <= 0 && (D = 0.1, C = ha);
				for (q = Number(l(B + r, 10)); q < y; q = Number(l(q + r, 10)), z += 1) {
					G && B < 0 && q > 0 && !n
							&& (O.addAxisAltGrid(h, 0), z += 1);
					if (q !== 0 && (!v || !c.catOccupied[q]))
						d = m === 1 && z % s === 0 ? o[A](q) : t, O
								.addAxisGridLine(h, q, d, D, E, C, 2, v);
					B = q;
					n || O.addAxisAltGrid(h, q)
				}
				n || O.addAxisAltGrid(h, y);
				if (g === 1 && z % s === 0 && (!v || !c.catOccupied[y]))
					d = o[A](y), O.addAxisGridLine(h, y, d, 0.1, E, ha, 2, v);
				if (this.realtimeEnabled)
					h.labels._enabled = h.labels.enabled, h._gridLineWidth = h.gridLineWidth, h._alternateGridColor = h.alternateGridColor;
				h.labels.enabled = !1;
				h.gridLineWidth = 0;
				h.alternateGridColor = ha;
				h.plotLines.sort(Cb)
			},
			xAxisMinMaxSetter : function(d, e, f) {
				var c = d[J], g = c.x, h = e.chart, l = g.min = a(g.min, 0), m = g.max = a(
						g.max, g.catCount - 1), n, o = 0, q = 0, t = d.chart.defaultSeriesType, r = /^(column|column3d|bar|bar3d|floatedcolumn|sparkwinloss|boxandwhisker2d)$/
						.test(t);
				/^(line|area|spline|areaspline)$/.test(t);
				var t = /^(scatter|bubble|candlestick)$/.test(t), y = d.xAxis, A = y.scroll, B = n = Math
						.min(a(h.canvaspadding, 0), f / 2 - 10);
				if (g.adjustMinMax) {
					var m = l = !a(h.setadaptivexmin, 1), C = a(
							this.numVDivLines, h.numvdivlines, 4), z = h.adjustvdiv !== Va, D = a(
							h.showxaxisvalues, h.showxaxisvalue, 1), G = a(
							h.showvlimits, D), D = a(h.showvdivlinevalue,
							h.showvdivlinevalues, D);
					this.axisMinMaxSetter(y, g, h.xaxismaxvalue,
							h.xaxisminvalue, l, m, C, z);
					l = y.min;
					m = y.max;
					g.requaredAutoNumeicLabels
							&& (C = a(parseInt(h.xaxisvaluesstep, 10), 1), this
									.configurePlotLines(h, d, y, g, G, D, C < 1
													? 1
													: C, c.numberFormatter, !1,
											!0));
					y.plotLines.sort(Cb)
				}
				y.labels.enabled = !1;
				y.gridLineWidth = 0;
				y.alternateGridColor = ha;
				if ((r || c.isScroll) && !c.hasNoColumn)
					q = c.isBar ? o = 0.55 : o = 0.5;
				c.is3d && (B += a(d.chart.xDepth, 0));
				d = (f - (B + n)) / (m - l + (o + q));
				y.min = l - (o + B / d);
				y.max = m + (q + n / d);
				if (A && A.enabled)
					o = A.vxLength, q = y.max - y.min, A.viewPortMin = y.min, A.viewPortMax = y.max, A.scrollRatio = o
							/ q, y.max = y.min + o;
				t && e.vtrendlines && Ta(e.vtrendlines, y, c, !1, !0, !0)
			},
			postSeriesAddition : function(a) {
				var e = a[J], f = e.isBar, c = e.is3d, g = a.chart.rotateValues
						&& !f ? 270 : 0;
				if (this.isStacked && e.showStackTotal) {
					var h, l, m, n = 1 - e.plotSpacePercent, o, t, y, r, A, B, z, C, D, E = q(
							{}, a.plotOptions.series.dataLabels.style), G = parseFloat(E.fontSize);
					l = e[0];
					var F = !l.stacking100Percent;
					E.color = a.plotOptions.series.dataLabels.color;
					m = l.stack;
					for (h in m) {
						l = m[h].length;
						o = n / l;
						y = -(n - o) / 2;
						for (t = 0; t < l; t += 1, y += o) {
							z = m[h][t];
							B = 0;
							for (A = z.length; B < A; B += 1)
								C = z[B], r = B, D = r + y, r = (C.n || 0)
										+ (C.p || 0), C = r < 0 ? C.n : C.p, a.xAxis.plotLines
										.push({
													value : D,
													width : 0,
													isVline : F,
													isTrend : !F,
													zIndex : 4,
													label : {
														align : La,
														textAlign : !c
																&& g === 270
																? r < 0
																		? Ua
																		: Q
																: f
																		? r < 0
																				? Ua
																				: Q
																		: La,
														offsetScale : F
																? C
																: void 0,
														offsetScaleIndex : 0,
														rotation : g,
														style : E,
														verticalAlign : vb,
														y : f ? 0 : r < 0
																? g === 270
																		? 4
																		: G
																: -4,
														x : 0,
														text : e.numberFormatter
																.yAxis(r)
													}
												})
						}
					}
				}
			},
			styleMapForFont : lb,
			styleApplicationDefinition_font : function(a, e, f) {
				var c, g = !1, h, l, m, n = this.styleMapForFont;
				switch (e) {
					case "caption" :
						e = a.title;
						break;
					case "datalabels" :
						e = a.xAxis.labels;
						break;
					case "datavalues" :
						e = a.plotOptions.series.dataLabels;
						g = !0;
						break;
					case "subcaption" :
						e = a.subtitle;
						break;
					case "tooltip" :
						e = a.tooltip;
						break;
					case "trendvalues" :
						e = {
							style : a[J].trendStyle
						};
						break;
					case "xaxisname" :
						e = a.xAxis.title;
						break;
					case "yaxisname" :
						e = [];
						h = 0;
						for (l = a.yAxis.length; h < l; h += 1)
							e.push(a.yAxis[h].title);
						break;
					case "yaxisvalues" :
						e = [];
						h = 0;
						for (l = a.yAxis.length; h < l; h += 1)
							e.push(a.yAxis[h].labels);
						break;
					case "vlinelabels" :
						e = {
							style : a[J].divlineStyle
						};
						break;
					case "legend" :
						e = {
							style : a.legend.itemStyle
						};
						break;
					default :
						a.orphanStyles[e] = e = {
							text : "",
							style : {}
						}
				}
				if (typeof e === "object")
					if (e instanceof Array) {
						h = 0;
						for (l = e.length; h < l; h += 1) {
							m = e[h];
							for (c in f)
								if (a = c.toLowerCase(), typeof n[a] === "function")
									n[a](f[c], m, g);
							zb(m.style)
						}
					} else {
						for (c in f)
							if (a = c.toLowerCase(), typeof n[a] === "function")
								n[a](f[c], e, g);
						zb(e.style)
					}
			},
			parseStyles : function(a) {
				var e, f, c, g = {}, h, l = this.dataObj;
				if (l.styles && l.styles.definition instanceof Array
						&& l.styles.application instanceof Array) {
					for (e = 0; e < l.styles.definition.length; e += 1)
						f = l.styles.definition[e], f.type
								&& f.name
								&& this["styleApplicationDefinition_"
										+ f.type.toLowerCase()]
								&& (g[f.name.toLowerCase()] = f);
					for (e = 0; e < l.styles.application.length; e += 1) {
						f = l.styles.application[e].styles
								&& l.styles.application[e].styles.split(fa)
								|| [];
						for (h = 0; h < f.length; h += 1)
							if (c = f[h].toLowerCase(), g[c]
									&& l.styles.application[e].toobject)
								this["styleApplicationDefinition_"
										+ g[c].type.toLowerCase()](a,
										l.styles.application[e].toobject
												.toLowerCase(), g[c])
					}
				}
			},
			dispose : function() {
				this.smartLabel && this.smartLabel.dispose()
			}
		});
		E("stub", {
					standaloneInit : !0
				}, E.base);
		E("barbase", {
					spaceManager : function() {
						return this.placeHorizontalXYSpaceManager.apply(this,
								arguments)
					}
				}, E.base);
		E("singleseries", {
			series : function(a, e, f) {
				var c = a.data || a.dataset && a.dataset[0]
						&& a.dataset[0].data;
				if (c && c.length > 0)
					e.legend.enabled = !1, f = this.point(f, {
								data : [],
								colorByPoint : !0
							}, c, a.chart, e), f instanceof Array
							? e.series = e.series.concat(f)
							: e.series.push(f), this.configureAxis(e, a), a.trendlines
							&& Ta(a.trendlines, e.yAxis, e[J], !1, this.isBar)
			},
			defaultSeriesType : t,
			configureAxis : function(d, e) {
				var f = d[J], c = e.chart, g, h, l, m, n, o, q, t, r, y, B, z;
				m = this.numberFormatter;
				var C;
				d.xAxis.title.text = A(c.xaxisname);
				C = a(parseInt(c.yaxisvaluesstep, 10), parseInt(
								c.yaxisvaluestep, 10), 1);
				C = C < 1 ? 1 : C;
				g = d.yAxis[0];
				h = f[0];
				f.isDual
						? (l = m.getCleanValue(c.pyaxismaxvalue), m = m
								.getCleanValue(c.pyaxisminvalue), g.title.text = A(c.pyaxisname))
						: (l = m.getCleanValue(c.yaxismaxvalue), m = m
								.getCleanValue(c.yaxisminvalue), g.title.text = A(c.yaxisname));
				q = a(this.isStacked ? 0 : this.setAdaptiveYMin,
						c.setadaptiveymin, 0);
				o = n = !q;
				t = a(f.numdivlines, c.numdivlines, this.numdivlines, 4);
				r = c.adjustdiv !== Va;
				y = a(this.showYAxisValues, c.showyaxisvalues,
						c.showyaxisvalue, 1);
				B = a(c.showlimits, y);
				z = a(c.showdivlinevalue, c.showdivlinevalues, y);
				this.axisMinMaxSetter(g, h, l, m, n, o, t, r);
				this.configurePlotLines(c, d, g, h, B, z, C, f.numberFormatter,
						!1);
				if (g.reversed && g.min >= 0)
					d.plotOptions.series.threshold = g.max;
				if (f.isDual)
					l = c.syaxismaxvalue, m = c.syaxisminvalue, q = a(
							c.setadaptivesymin, q), o = n = !q, B = a(
							c.showsecondarylimits, B), z = a(
							c.showdivlinesecondaryvalue, y), g = d.yAxis[1], h = f[1], this
							.axisMinMaxSetter(g, h, l, m, n, o, t, r), this
							.configurePlotLines(c, d, g, h, B, z, C,
									f.numberFormatter, !0), g.title.text = A(c.syaxisname)
			},
			pointValueWatcher : function(d, f, h, c, g, l, m) {
				if (f !== null) {
					d = d[J];
					h = a(h, 0);
					d[h] || (d[h] = {});
					h = d[h];
					if (c)
						this.distributedColumns && (d.marimekkoTotal += f), c = h.stack, g = a(
								g, 0), l = a(l, 0), m = e(m, na), c[m]
								|| (c[m] = []), m = c[m], m[l] || (m[l] = []), l = m[l], l[g]
								|| (l[g] = {}), g = l[g], f >= 0 ? g.p
								? f = g.p += f
								: g.p = f : g.n ? f = g.n += f : g.n = f;
					h.max = h.max > f ? h.max : f;
					h.min = h.min < f ? h.min : f
				}
			},
			getPointStub : function(d, f, h, c) {
				var c = c[J], f = f === null ? f : c.numberFormatter
						.dataLabels(f), g = B(A(d.tooltext)), l = B(A(d.displayvalue)), h = c.showTooltip
						? g !== void 0 ? g : f === null ? !1 : h !== t ? h
								+ c.tooltipSepChar + f : f
						: t, c = a(d.showvalue, c.showValues) ? l !== void 0
						? l
						: f : t, d = e(d.link);
				return {
					displayValue : c,
					toolText : h,
					link : d
				}
			}
		}, E.base);
		E("multiseries", {
			series : function(d, e, f) {
				var c, g, h = e[J], l;
				e.legend.enabled = Boolean(a(d.chart.showlegend, 1));
				if (d.dataset && d.dataset.length > 0) {
					this.categoryAdder(d, e);
					c = 0;
					for (g = d.dataset.length; c < g; c += 1)
						l = {
							data : []
						}, l = this.point(f, l, d.dataset[c], d.chart, e,
								h.oriCatTmp.length, c), l instanceof Array
								? e.series = e.series.concat(l)
								: e.series.push(l);
					this.configureAxis(e, d);
					d.trendlines && !this.isLog
							&& Ta(d.trendlines, e.yAxis, h, !1, this.isBar)
				}
			},
			categoryAdder : function(d, e) {
				var f, c = 0, g = e[J], h = g.axisGridManager, l = d.chart, m = e.xAxis, n, g = g.x;
				if (d.categories && d.categories[0] && d.categories[0].category) {
					if (d.categories[0].font)
						e.xAxis.labels.style.fontFamily = d.categories[0].font;
					if ((f = a(d.categories[0].fontsize)) !== void 0)
						f < 1 && (f = 1), e.xAxis.labels.style.fontSize = f
								+ Wa, zb(e.xAxis.labels.style);
					if (d.categories[0].fontcolor)
						e.xAxis.labels.style.color = d.categories[0].fontcolor
								.split(fa)[0].replace(/^\#?/, "#");
					var o = e[J].oriCatTmp, q = d.categories[0].category;
					for (f = 0; f < q.length; f += 1)
						q[f].vline
								? h.addVline(m, q[f], c, e)
								: (n = (n = a(q[f].showlabel, l.showlabels, 1))
										? A(D(
												d.categories[0].category[f].label,
												d.categories[0].category[f].name))
										: t, h.addXaxisCat(m, c, c, n), o[c] = D(
										A(d.categories[0].category[f].tooltext),
										n), c += 1)
				}
				g.catCount = c
			},
			getPointStub : function(d, f, h, c, g, l, m) {
				var o, c = c[J], n, q, f = f === null ? f : c.numberFormatter
						.dataLabels(f, m === 1 ? !0 : !1), y, z = B(A(d.tooltext)), m = c.tooltipSepChar;
				c.showTooltip ? z !== void 0
						? g = z
						: f === null ? g = !1 : (c.seriesNameInToolTip
								&& (y = D(g && g.seriesname)), g = y
								? y + m
								: t, g += h ? h + m : t, c.showPercentInToolTip
								? q = !0
								: g += f) : g = !1;
				a(d.showvalue, l) ? B(d.displayvalue) !== void 0
						? o = d.displayvalue
						: c.showPercentValues ? n = !0 : o = f : o = t;
				d = e(d.link);
				return {
					displayValue : o,
					toolText : g,
					link : d,
					showPercentValues : n,
					showPercentInToolTip : q
				}
			}
		}, E.singleseries);
		var Pb = function(a, e) {
			return a - e
		};
		E("xybase", {
			hideRLine : function() {
				var a = this.chart.series[this.index + 1];
				a && a.hide && a.hide()
			},
			showRLine : function() {
				var a = this.chart.series[this.index + 1];
				a && a.show && a.show()
			},
			getRegressionLineSeries : function(a, e, f) {
				var c, g, h, l;
				l = a.sumXY;
				var m = a.sumX, n = a.sumY;
				g = a.xValues;
				h = a.sumXsqure;
				c = a.yValues;
				a = a.sumYsqure;
				e
						? (g.sort(Pb), c = g[0], g = g[g.length - 1], l = (f
								* l - m * n)
								/ (f * h - Math.pow(m, 2)), h = !isNaN(l) ? l
								* (c - m / f) + n / f : n / f, f = !isNaN(l)
								? l * (g - m / f) + n / f
								: n / f, f = [{
									x : c,
									y : h
								}, {
									x : g,
									y : f
								}])
						: (c.sort(Pb), h = c[0], c = c[c.length - 1], l = (f
								* l - m * n)
								/ (f * a - Math.pow(n, 2)), g = !isNaN(l) ? l
								* (h - n / f) + m / f : m / f, f = !isNaN(l)
								? l * (c - n / f) + m / f
								: m / f, f = [{
									x : g,
									y : h
								}, {
									x : f,
									y : c
								}]);
				return f
			},
			pointValueWatcher : function(a, e, f, c) {
				var g = a[J];
				if (e !== null)
					a = g[0], a.max = a.max > e ? a.max : e, a.min = a.min < e
							? a.min
							: e;
				if (f !== null)
					a = g.x, a.max = a.max > f ? a.max : f, a.min = a.min < f
							? a.min
							: f;
				c
						&& (f = f || 0, e = e || 0, c.sumX += f, c.sumY += e, c.sumXY += f
								* e, c.sumXsqure += Math.pow(f, 2), c.xValues
								.push(f), c.sumYsqure += Math.pow(e, 2), c.yValues
								.push(e))
			}
		}, E.multiseries);
		E("scrollbase", {
			postSeriesAddition : function(d, j) {
				d.chart.hasScroll = !0;
				var h = d.xAxis.scroll, c = d[J], g = c.width, l = c.x.catCount, s = j.chart;
				c.isScroll = !0;
				if (this.isStacked)
					o = 1;
				else {
					var o = 0, n = 0, q, t = d.series, y, r = d.chart.defaultSeriesType;
					for (q = t.length; n < q; n++)
						y = e(t[n].type, r), y === "column" && (o += 1);
					o < 1 && (o = 1)
				}
				l *= o;
				g = a(s.numvisibleplot, Math
								.floor(g / this.avgScrollPointWidth));
				if (h && g >= 2 && g < l)
					h.enabled = !0, h.vxLength = g / o, h.startPercent = s.scrolltoend === hb
							? 1
							: 0, h.padding = a(s.scrollpadding,
							d.chart.plotBorderWidth / 2), h.height = a(
							s.scrollheight, 16), h.buttonWidth = a(
							s.scrollbtnwidth, s.scrollheight, 16), h.buttonPadding = a(
							s.scrollbtnpadding, 0), h.color = m(e(
							s.scrollcolor,
							f.altHGridColor[d.chart.paletteIndex])), c.marginBottomExtraSpace += h.padding
							+ h.height
			}
		}, E.multiseries);
		K = E.singleseries;
		lb = E.multiseries;
		E("column2dbase", {
			point : function(d, h, l, c, g) {
				var d = l.length, m = g[J], s = m.axisGridManager, y = g.xAxis, n = g.chart.paletteIndex, m = m.x, v = g.colors, B = g.colors.length, z = /3d$/
						.test(g.chart.defaultSeriesType), r = this.isBar, E = e(
						c.showplotborder, z ? Va : hb) === hb ? z ? 1 : a(
						c.plotborderthickness, 1) : 0, F = g.chart.useRoundEdges, O = a(
						c.plotborderalpha, c.plotfillalpha, 100), C = e(
						c.plotbordercolor, f.plotBorderColor[n]).split(fa)[0], n = fa
						+ (a(c.useplotgradientcolor, 1)
								? o(c.plotgradientcolor, f.plotGradientColor[n])
								: t), K = 0, N = Boolean(a(c.use3dlighting, 1)), G = g[J].numberFormatter, V, P = a(
						c.plotborderdashed, 0), Q = a(c.plotborderdashlen, 5), S = a(
						c.plotborderdashgap, 4), T, R, $, Z, ca, ga, ha, na, L;
				for ($ = R = 0; R < d; R += 1)
					ha = l[R], ha.vline
							? s.addVline(y, ha, K, g)
							: (T = G.getCleanValue(ha.value), Z = a(
									ha.showlabel, c.showlabels, 1), Z = A(!Z
									? t
									: D(ha.label, ha.name)), s.addXaxisCat(y,
									K, K, Z), K += 1, V = e(ha.color, v[$ % B])
									+ n, ca = e(ha.alpha, c.plotfillalpha, ab), ga = e(
									ha.ratio, c.plotfillratio), na = e(360
											- c.plotfillangle, 90), T < 0
									&& (na = 360 - na), L = {
								opacity : ca / 100,
								inverted : r
							}, ca = W(V, ca, ga, na, F, C, e(ha.alpha, O) + t,
									r, z), V = a(ha.dashed, P)
									? ma(e(ha.dashlen, Q), e(ha.dashgap, S), E)
									: void 0, h.data.push(q(this.getPointStub(
											ha, T, Z, g), {
										y : T,
										shadow : L,
										color : ca[0],
										borderColor : ca[1],
										borderWidth : E,
										use3DLighting : N,
										dashStyle : V,
										tooltipConstraint : this.tooltipConstraint
									})), this.pointValueWatcher(g, T), $ += 1);
				m.catCount = K;
				return h
			},
			defaultSeriesType : "column"
		}, K);
		E("linebase", {
			defaultSeriesType : "line",
			hasVDivLine : !0,
			defaultPlotShadow : 1,
			point : function(d, h, l, c, g) {
				var o, s, y, n, v, B, z, r, E, F, K, C, N, P, G, V, Q, R, S, T, W, Z, $, ca, fa, d = g.chart, ha = l.length, ga = g.xAxis;
				o = g[J];
				var L = o.axisGridManager, Y = 0, na = o.x, qa = g.chart.paletteIndex, wa = g[J].numberFormatter;
				G = m(e(c.linecolor, c.palettecolors, f.plotFillColor[qa]));
				V = e(c.linealpha, ab);
				C = a(c.linethickness, this.lineThickness, 4);
				N = Boolean(a(c.linedashed, 0));
				r = a(c.linedashlen, 5);
				E = a(c.linedashgap, 4);
				h.color = {
					FCcolor : {
						color : G,
						alpha : V
					}
				};
				h.lineWidth = C;
				h.step = this.stepLine;
				h.drawVerticalJoins = Boolean(a(c.drawverticaljoins, 1));
				P = a(c.drawanchors, c.showanchors);
				for (v = s = 0; s < ha; s += 1)
					n = l[s], n.vline
							? L.addVline(ga, n, Y, g)
							: (o = wa.getCleanValue(n.value), y = a(
									n.showlabel, c.showlabels, 1), y = A(!y
									? t
									: D(n.label, n.name)), L.addXaxisCat(ga, Y,
									Y, y), Y += 1, F = m(e(n.color, G)), K = e(
									n.alpha, V), B = a(n.dashed, N) ? ma(r, E,
									C) : void 0, z = {
								opacity : K / 100
							}, R = a(n.anchorsides, c.anchorsides, 0), fa = a(
									n.anchorstartangle, c.anchorstartangle, 0), W = a(
									n.anchorradius, c.anchorradius,
									this.anchorRadius, 3), T = m(e(
									n.anchorbordercolor, c.anchorbordercolor, G)), S = a(
									n.anchorborderthickness,
									c.anchorborderthickness,
									this.anchorBorderThickness, 1), Z = m(e(
									n.anchorbgcolor, c.anchorbgcolor,
									f.anchorBgColor[qa])), $ = e(n.anchoralpha,
									c.anchoralpha, ab), ca = e(n.anchorbgalpha,
									c.anchorbgalpha, $), Q = P === void 0
									? K != 0
									: !!P, h.data.push(q(this.getPointStub(n,
											o, y, g), {
										y : o,
										color : {
											FCcolor : {
												color : F,
												alpha : K
											}
										},
										shadow : z,
										dashStyle : B,
										valuePosition : e(n.valueposition,
												d.valuePosition),
										marker : {
											enabled : !!Q,
											fillColor : {
												FCcolor : {
													color : Z,
													alpha : ca * $ / 100 + t
												}
											},
											lineColor : {
												FCcolor : {
													color : T,
													alpha : $
												}
											},
											lineWidth : S,
											radius : W,
											startAngle : fa,
											symbol : O(R)
										},
										tooltipConstraint : this.tooltipConstraint
									})), this.pointValueWatcher(g, o), v += 1);
				na.catCount = Y;
				return h
			},
			defaultZeroPlaneHighlighted : !1
		}, K);
		E("area2dbase", {
			defaultSeriesType : "area",
			hasVDivLine : !0,
			point : function(d, h, l, c, g) {
				var d = g.chart, w = l.length, s = g.xAxis, y = g[J], n = g.chart.paletteIndex, v = y.axisGridManager, y = y.x, z = g[J].numberFormatter, E = 0, r, F, K, N, C, P, Q, G, V, R, W, S, T, $, Z, ca, ha, ga, na, qa, L, Y, wa;
				N = e(c.plotfillcolor, c.areabgcolor,
						B(c.palettecolors) ? g.colors[0] : f.plotFillColor[n])
						.split(fa)[0];
				Y = fa
						+ (a(c.useplotgradientcolor, 1)
								? o(c.plotgradientcolor, f.plotGradientColor[n])
								: t);
				C = e(c.plotfillalpha, c.areaalpha, "90");
				P = a(c.plotfillangle, 270);
				Q = e(c.plotbordercolor, c.areabordercolor,
						B(c.palettecolors) ? g.colors[0] : f.plotBorderColor[n])
						.split(fa)[0];
				G = c.showplotborder == Va ? Va : e(c.plotborderalpha,
						c.plotfillalpha, c.areaalpha, ab);
				r = a(c.plotborderangle, 270);
				F = Boolean(a(c.plotborderdashed, 0));
				T = a(c.plotborderdashlen, 5);
				ha = a(c.plotborderdashgap, 4);
				ga = a(c.plotborderthickness, c.areaborderthickness, 1);
				wa = h.fillColor = {
					FCcolor : {
						color : N + Y,
						alpha : C,
						ratio : rb,
						angle : P
					}
				};
				h.lineWidth = ga;
				h.dashStyle = F ? ma(T, ha, ga) : void 0;
				h.lineColor = {
					FCcolor : {
						color : Q,
						alpha : G,
						ratio : ab,
						angle : r
					}
				};
				ha = Boolean(a(c.drawanchors, c.showanchors, 1));
				for (ga = F = 0; F < w; F += 1)
					T = l[F], T.vline
							? v.addVline(s, T, E, g)
							: (r = z.getCleanValue(T.value), K = a(T.showlabel,
									c.showlabels, 1), K = A(!K ? t : D(T.label,
									T.name)), v.addXaxisCat(s, E, E, K), E += 1, V = a(
									T.anchorsides, c.anchorsides, 0), S = a(
									T.anchorstartangle, c.anchorstartangle, 0), R = a(
									T.anchorradius, c.anchorradius, 3), W = m(e(
									T.anchorbordercolor, c.anchorbordercolor, Q)), na = a(
									T.anchorborderthickness,
									c.anchorborderthickness, 1), $ = m(e(
									T.anchorbgcolor, c.anchorbgcolor,
									f.anchorBgColor[n])), Z = e(T.anchoralpha,
									c.anchoralpha, this.anchorAlpha, Va), ca = e(
									T.anchorbgalpha, c.anchorbgalpha, Z), qa = B(T.color), L = a(T.alpha), qa = qa !== void 0
									|| L !== void 0 ? {
								FCcolor : {
									color : qa ? m(qa) + Y : N,
									alpha : void 0 === L ? Tb(L) + t : C,
									ratio : rb,
									angle : P
								}
							} : wa, L = {
								opacity : Math.max(L, G) / 100,
								inverted : !0
							}, h.data.push(q(this.getPointStub(T, r, K, g), {
										y : r,
										shadow : L,
										color : qa,
										valuePosition : e(T.valueposition,
												d.valuePosition),
										marker : {
											enabled : ha,
											fillColor : {
												FCcolor : {
													color : $,
													alpha : ca * Z / 100 + t
												}
											},
											lineColor : {
												FCcolor : {
													color : W,
													alpha : Z
												}
											},
											lineWidth : na,
											radius : R,
											symbol : O(V),
											startAngle : S
										},
										tooltipConstraint : this.tooltipConstraint
									})), this.pointValueWatcher(g, r), ga += 1);
				y.catCount = E;
				return h
			}
		}, K);
		var Db = {
			column : function(d, f, h) {
				var c = d[J], g = f.borderWidth;
				return function(l, m, o) {
					var n = e(l.alpha, f.alpha), q = {
						opacity : n / 100
					}, n = W(e(l.color, f.color) + f.plotgradientcolor, n, e(
									l.ratio, f.ratio), f.fillAangle,
							f.isRoundEdges, f.plotBorderColor, Math.min(n,
									f.plotBorderAlpha).toString(), f.isBar,
							f.is3d), t = a(l.dashed, f.dashed) ? ma(e(
									l.dashlen, f.dashLen), e(l.dashgap,
									f.dashGap), g) : void 0, l = h
							.getPointStub(l, o, c.oriCatTmp[m], d, f,
									f.showValues, f.yAxis);
					l.y = o;
					l.shadow = q;
					l.color = n[0];
					l.borderColor = n[1];
					l.borderWidth = g;
					l.use3DLighting = f.use3DLighting;
					l.dashStyle = t;
					l.tooltipConstraint = h.tooltipConstraint;
					return l
				}
			},
			line : function(d, f, h) {
				var c = d[J];
				return function(g, l, o) {
					var q = e(g.alpha, f.lineAlpha), n = {
						opacity : q / 100
					}, t = e(g.anchoralpha, f.anchorAlpha), l = h.getPointStub(
							g, o, c.oriCatTmp[l], d, f, f.showValues, f.yAxis);
					l.y = o;
					l.shadow = n;
					l.dashStyle = a(g.dashed, f.lineDashed) ? ma(f.lineDashLen,
							f.lineDashGap, f.lineThickness) : void 0;
					l.color = {
						FCcolor : {
							color : m(e(g.color, f.lineColor)),
							alpha : q
						}
					};
					l.valuePosition = e(g.valueposition, f.valuePosition);
					l.marker = {
						enabled : f.drawAnchors === void 0
								? q != 0
								: !!f.drawAnchors,
						fillColor : {
							FCcolor : {
								color : m(e(g.anchorbgcolor, f.anchorBgColor)),
								alpha : (e(g.anchorbgalpha, f.anchorBgAlpha)
										* t / 100).toString()
							}
						},
						lineColor : {
							FCcolor : {
								color : m(e(g.anchorbordercolor,
										f.anchorBorderColor)),
								alpha : t
							}
						},
						lineWidth : a(g.anchorborderthickness,
								f.anchorBorderThickness),
						radius : a(g.anchorradius, f.anchorRadius),
						symbol : O(a(g.anchorsides, f.anchorSides)),
						startAngle : e(g.anchorstartangle, f.anchorAngle)
					};
					return l
				}
			},
			area : function(d, f, h) {
				var c = d[J];
				return function(g, l, o) {
					var q = e(g.alpha, f.fillAlpha), n = {
						opacity : Math.max(q, f.lineAlpha) / 100,
						inverted : !0
					}, t = e(g.anchoralpha, f.anchorAlpha), l = h.getPointStub(
							g, o, c.oriCatTmp[l], d, f, f.showValues, f.yAxis);
					l.y = o;
					l.shadow = n;
					l.color = {
						FCcolor : {
							color : m(e(g.color, f.fillColor)),
							alpha : q
						}
					};
					l.valuePosition = e(g.valueposition, f.valuePosition);
					l.marker = {
						enabled : f.drawAnchors,
						fillColor : {
							FCcolor : {
								color : m(e(g.anchorbgcolor, f.anchorBgColor)),
								alpha : (e(g.anchorbgalpha, f.anchorBgAlpha)
										* t / 100).toString()
							}
						},
						lineColor : {
							FCcolor : {
								color : m(e(g.anchorbordercolor,
										f.anchorBorderColor)),
								alpha : t
							}
						},
						lineWidth : a(g.anchorborderthickness,
								f.anchorBorderThickness),
						radius : a(g.anchorradius, f.anchorRadius),
						symbol : O(a(g.anchorsides, f.anchorSides)),
						startAngle : e(g.anchorstartangle, f.anchorAngle)
					};
					l.events = {
						click : f.getLink
					};
					return l
				}
			}
		};
		E("mscolumn2dbase", {
			point : function(d, h, l, c, g, m, s, q) {
				var b;
				var d = !1, n = l.data || [], v = g[J], y = e(h.type,
						this.defaultSeriesType), A = g.plotOptions[y]
						&& g.plotOptions[y].stacking, r = e(this.isValueAbs,
						v.isValueAbs, !1), z = a(h.yAxis, 0), D = g[J].numberFormatter, E = g.chart.paletteIndex, C, F, K;
				h.name = B(l.seriesname);
				if (a(l.includeinlegend) === 0 || h.name === void 0)
					h.showInLegend = !1;
				h.color = e(l.color, g.colors[s % g.colors.length]).split(fa)[0]
						.replace(/^#?/g, "#");
				K = /3d$/.test(g.chart.defaultSeriesType);
				F = e(360 - c.plotfillangle, 90);
				C < 0 && (F = 360 - F);
				b = h._dataParser = Db.column(g, {
							seriesname : h.name,
							color : e(l.color, g.colors[s % g.colors.length]),
							alpha : e(l.alpha, c.plotfillalpha, ab),
							plotgradientcolor : fa
									+ (a(c.useplotgradientcolor, 1) ? o(
											c.plotgradientcolor,
											f.plotGradientColor[E]) : t),
							ratio : e(l.ratio, c.plotfillratio),
							fillAangle : F,
							isRoundEdges : g.chart.useRoundEdges,
							plotBorderColor : e(c.plotbordercolor,
									K ? ub : f.plotBorderColor[E]).split(fa)[0],
							plotBorderAlpha : c.showplotborder == Va || K
									&& c.showplotborder != hb ? Va : e(
									c.plotborderalpha, ab),
							isBar : this.isBar,
							is3d : K,
							dashed : a(l.dashed, c.plotborderdashed, 0),
							dashLen : a(l.dashlen, c.plotborderdashlen, 5),
							dashGap : a(l.dashgap, c.plotborderdashgap, 4),
							borderWidth : e(c.plotborderthickness, hb),
							showValues : a(l.showvalues, v.showValues),
							yAxis : z,
							use3DLighting : a(c.use3dlighting, 1)
						}, this), l = b;
				for (c = 0; c < m; c += 1)
					(s = n[c])
							? (C = D.getCleanValue(s.value, r), C === null
									? h.data.push({
												y : null
											})
									: (d = !0, h.data.push(l(s, c, C)), this
											.pointValueWatcher(g, C, z, A, c,
													q, y)))
							: h.data.push({
										y : null
									});
				if (!d && !this.realtimeEnabled)
					h.showInLegend = !1;
				return h
			},
			defaultSeriesType : "column"
		}, lb);
		E("mslinebase", {
			hasVDivLine : !0,
			point : function(d, h, l, c, g, o, s) {
				var b;
				var d = !1, q, n;
				q = g.chart;
				var v = l.data || [];
				n = g[J];
				var y = e(h.type, this.defaultSeriesType), A = g.plotOptions[y]
						&& g.plotOptions[y].stacking, r = e(this.isValueAbs,
						n.isValueAbs, !1), z = a(h.yAxis, 0), D = this.numberFormatter, s = m(e(
						l.color, c.linecolor, g.colors[s % g.colors.length])), E = e(
						l.alpha, c.linealpha, ab), C = a(l.drawanchors,
						l.showanchors, c.drawanchors, c.showanchors), F = a(
						l.anchorsides, c.anchorsides, 0), K = a(
						l.anchorstartangle, c.anchorstartangle, 0), G = a(
						l.anchorradius, c.anchorradius, 3), N = m(e(
						l.anchorbordercolor, c.anchorbordercolor, s)), P = a(
						l.anchorborderthickness, c.anchorborderthickness, 1), Q = m(e(
						l.anchorbgcolor, c.anchorbgcolor,
						f.anchorBgColor[g.chart.paletteIndex])), S = e(
						l.anchoralpha, c.anchoralpha, ab), T = e(
						l.anchorbgalpha, c.anchorbgalpha, S);
				h.name = B(l.seriesname);
				if (a(l.includeinlegend) === 0 || h.name === void 0 || E == 0
						&& C !== 1)
					h.showInLegend = !1;
				h.marker = {
					fillColor : {
						FCcolor : {
							color : Q,
							alpha : T * S / 100 + t
						}
					},
					lineColor : {
						FCcolor : {
							color : N,
							alpha : S + t
						}
					},
					lineWidth : P,
					radius : G,
					symbol : O(F),
					startAngle : K
				};
				h.color = {
					FCcolor : {
						color : s,
						alpha : E
					}
				};
				h.step = this.stepLine;
				h.drawVerticalJoins = Boolean(a(c.drawverticaljoins, 1));
				h.lineWidth = a(l.linethickness, c.linethickness, 2);
				b = h._dataParser = Db.line(g, {
							seriesname : h.name,
							lineAlpha : E,
							anchorAlpha : S,
							showValues : a(l.showvalues, n.showValues),
							yAxis : z,
							lineDashed : Boolean(a(l.dashed, c.linedashed, 0)),
							lineDashLen : a(l.linedashlen, c.linedashlen, 5),
							lineDashGap : a(l.linedashgap, c.linedashgap, 4),
							lineThickness : h.lineWidth,
							lineColor : s,
							valuePosition : e(l.valueposition, q.valuePosition),
							drawAnchors : C,
							anchorBgColor : Q,
							anchorBgAlpha : T,
							anchorBorderColor : N,
							anchorBorderThickness : P,
							anchorRadius : G,
							anchorSides : F,
							anchorAngle : K
						}, this), q = b;
				for (c = 0; c < o; c += 1)
					(n = v[c])
							? (l = D.getCleanValue(n.value, r), l === null
									? h.data.push({
												y : null
											})
									: (d = !0, h.data.push(q(n, c, l)), this
											.pointValueWatcher(g, l, z, A, c,
													0, y)))
							: h.data.push({
										y : null
									});
				if (!d && !this.realtimeEnabled)
					h.showInLegend = !1;
				return h
			},
			defaultSeriesType : "line",
			defaultPlotShadow : 1,
			defaultZeroPlaneHighlighted : !1
		}, lb);
		E("msareabase", {
			hasVDivLine : !0,
			point : function(d, h, l, c, g, q, s) {
				var b;
				var d = !1, y = g.chart, n = l.data || [], v = g[J], B = e(
						h.type, this.defaultSeriesType), A = g.plotOptions[B]
						&& g.plotOptions[B].stacking, r = e(this.isValueAbs,
						v.isValueAbs, !1), z = g.chart.paletteIndex, D = a(
						h.yAxis, 0), E = g[J].numberFormatter, C = e(l.color,
						g.colors[s % g.colors.length]).split(fa)[0].replace(
						/^#?/g, "#").split(fa)[0], F = e(l.alpha,
						c.plotfillalpha, c.areaalpha, this.isRadar
								? "50"
								: "70"), K = a(c.plotfillangle, 270), s = e(
						l.plotbordercolor,
						c.plotbordercolor,
						c.areabordercolor,
						this.isRadar
								? g.colors[s % g.colors.length]
								: f.plotFillColor[g.chart.paletteIndex])
						.split(fa)[0], G = e(l.showplotborder, c.showplotborder) == Va
						? Va
						: e(l.plotborderalpha, c.plotborderalpha,
								l.plotfillalpha, c.plotfillalpha, "95"), N = a(
						c.plotborderangle, 270), P = a(l.anchorsides,
						c.anchorsides, 0), Q = a(l.anchorstartangle,
						c.anchorstartangle, 0), S = a(l.anchorradius,
						c.anchorradius, 3), T = m(e(l.anchorbordercolor,
						c.anchorbordercolor, C)), R = a(
						l.anchorborderthickness, c.anchorborderthickness, 1), W = m(e(
						l.anchorbgcolor, c.anchorbgcolor, f.anchorBgColor[z])), Z = a(
						l.anchoralpha, c.anchoralpha, this.anchorAlpha, 0), $ = a(
						l.anchorbgalpha, c.anchorbgalpha, Z);
				this.isRadar
						|| (C += fa
								+ (a(c.useplotgradientcolor, 1) ? o(
										c.plotgradientcolor,
										f.plotGradientColor[z]) : t));
				h.name = e(l.seriesname);
				if (a(l.includeinlegend) === 0 || h.name === void 0)
					h.showInLegend = !1;
				h.fillColor = {
					FCcolor : {
						color : C,
						alpha : F,
						ratio : rb,
						angle : K
					}
				};
				h.color = C;
				h.lineColor = {
					FCcolor : {
						color : s,
						alpha : G,
						ratio : ab,
						angle : N
					}
				};
				h.lineWidth = e(l.plotborderthickness, c.plotborderthickness, 1);
				h.dashStyle = Boolean(a(l.dashed, c.plotborderdashed, 0)) ? ma(
						a(l.dashlen, c.plotborderdashlen, 5), a(l.dashgap,
								c.plotborderdashgap, 4), h.lineWidth) : void 0;
				h.marker = {
					fillColor : {
						FCcolor : {
							color : W,
							alpha : $ * Z / 100 + t
						}
					},
					lineColor : {
						FCcolor : {
							color : T,
							alpha : Z + t
						}
					},
					lineWidth : R,
					radius : S,
					symbol : O(P),
					startAngle : Q
				};
				b = h._dataParser = Db.area(g, {
							seriesname : h.name,
							lineAlpha : G,
							anchorAlpha : Z,
							showValues : a(l.showvalues, v.showValues),
							yAxis : D,
							fillColor : C,
							fillAlpha : F,
							valuePosition : e(l.valueposition, y.valuePosition),
							drawAnchors : Boolean(a(c.drawanchors,
									c.showanchors, 1)),
							anchorBgColor : W,
							anchorBgAlpha : $,
							anchorBorderColor : T,
							anchorBorderThickness : R,
							anchorRadius : S,
							anchorSides : P,
							anchorAngle : Q,
							getLink : this.linkClickFN
						}, this), l = b;
				for (y = 0; y < q; y += 1)
					(v = n[y])
							? (c = v ? E.getCleanValue(v.value, r) : null, c === null
									? h.data.push({
												y : null
											})
									: (d = !0, h.data.push(l(v, y, c)), this
											.pointValueWatcher(g, c, D, A, y,
													0, B)))
							: h.data.push({
										y : null
									});
				if (!d && !this.realtimeEnabled)
					h.showInLegend = !1;
				return h
			},
			defaultSeriesType : "area",
			defaultPlotShadow : 0
		}, lb);
		E("scatterbase", {
			showValues : 0,
			defaultPlotShadow : 0,
			point : function(d, h, l, c, g, o, s) {
				if (l.data) {
					var q, n, v, y, A, r, z, D, F, C, K, N, G, P, Q, R, S, T = !1, W, Z, d = E[d];
					v = a(l.drawline, 0);
					y = a(l.drawprogressioncurve, 0);
					var o = l.data, ca = o.length, fa = a(l.showvalues,
							g[J].showValues), ga = this.numberFormatter, ha = a(
							l.showregressionline, c.showregressionline, 0);
					h.zIndex = 1;
					h.name = B(l.seriesname);
					if (a(l.includeinlegend) === 0 || h.name === void 0)
						h.showInLegend = !1;
					if (v || y) {
						if (y)
							h.type = "spline";
						n = m(e(l.color, c.linecolor, g.colors[s
										% g.colors.length]));
						v = e(l.alpha, c.linealpha, ab);
						y = a(l.linethickness, c.linethickness, 2);
						A = Boolean(a(l.dashed, c.linedashed, 0));
						r = a(l.linedashlen, c.linedashlen, 5);
						z = a(l.linedashgap, c.linedashgap, 4);
						h.color = {
							FCcolor : {
								color : n,
								alpha : v
							}
						};
						h.lineWidth = y;
						h.dashStyle = A ? ma(r, z, y) : void 0
					}
					v = Boolean(a(l.drawanchors, l.showanchors, c.drawanchors,
							c.showanchors, 1));
					y = a(l.anchorsides, c.anchorsides, s + 3);
					A = a(l.anchorradius, c.anchorradius, 3);
					s = m(e(l.anchorbordercolor, l.color, c.anchorbordercolor,
							n, g.colors[s % g.colors.length]));
					n = a(l.anchorborderthickness, c.anchorborderthickness, 1);
					r = m(e(l.anchorbgcolor, c.anchorbgcolor,
							f.anchorBgColor[g.chart.paletteIndex]));
					z = e(l.anchoralpha, c.anchoralpha, ab);
					F = e(l.anchorbgalpha, c.anchorbgalpha, z);
					W = e(l.anchorstartangle, c.anchorstartangle);
					h.marker = {
						fillColor : this.getPointColor(r, ab),
						lineColor : {
							FCcolor : {
								color : s,
								alpha : z + t
							}
						},
						lineWidth : n,
						radius : A,
						symbol : O(y)
					};
					if (ha) {
						h.events = {
							hide : this.hideRLine,
							show : this.showRLine
						};
						var na = {
							sumX : 0,
							sumY : 0,
							sumXY : 0,
							sumXsqure : 0,
							sumYsqure : 0,
							xValues : [],
							yValues : []
						}, L = a(l.showyonx, c.showyonx, 1), Y = m(e(
								l.regressionlinecolor, c.regressionlinecolor, s)), qa = a(
								l.regressionlinethickness,
								c.regressionlinethickness, n), c = Tb(a(
								l.regressionlinealpha, c.regressionlinealpha, z)), Y = $(
								Y, c)
					}
					for (q = 0; q < ca; q += 1)
						(D = o[q]) ? (c = ga.getCleanValue(D.y), S = ga
								.getCleanValue(D.x), c === null
								? h.data.push({
											y : null,
											x : S
										})
								: (T = !0, Z = d.getPointStub(D, c,
										ga.xAxis(S), g, l, fa), C = a(
										D.anchorsides, y), K = a(
										D.anchorradius, A), N = m(e(
										D.anchorbordercolor, s)), G = a(
										D.anchorborderthickness, n), P = m(e(
										D.anchorbgcolor, r)), Q = e(
										D.anchoralpha, z), R = e(
										D.anchorbgalpha, F), h.data.push({
											y : c,
											x : S,
											displayValue : Z.displayValue,
											toolText : Z.toolText,
											link : Z.link,
											marker : {
												enabled : v,
												fillColor : {
													FCcolor : {
														color : P,
														alpha : R * Q / 100 + t
													}
												},
												lineColor : {
													FCcolor : {
														color : N,
														alpha : Q
													}
												},
												lineWidth : G,
												radius : K,
												symbol : O(C),
												startAngle : e(
														D.anchorstartangle, W)
											}
										}), this.pointValueWatcher(g, c, S, ha
												&& na))) : h.data.push({
									y : null
								});
					ha
							&& (l = this.getRegressionLineSeries(na, L, ca), this
									.pointValueWatcher(g, l[0].y, l[0].x), this
									.pointValueWatcher(g, l[1].y, l[1].x), g = {
								type : "line",
								color : Y,
								showInLegend : !1,
								lineWidth : qa,
								enableMouseTracking : !1,
								marker : {
									enabled : !1
								},
								data : l,
								zIndex : 0
							}, h = [h, g])
				}
				if (!T)
					h.showInLegend = !1;
				return h
			},
			categoryAdder : function(d, h) {
				var l, c = 0, g, m = h[J].x, o, q = h.xAxis, n, v;
				v = d.chart;
				var y = parseInt(v.labelstep, 10), z = a(v.showlabels, 1), r = e(
						v.xaxislabelmode, "categories").toLowerCase(), B = h[J].numberFormatter;
				h._FCconf.isXYPlot = !0;
				y = y > 1 ? y : 1;
				m.catOccupied = {};
				if (r !== "auto" && d.categories && d.categories[0]
						&& d.categories[0].category) {
					v = d.categories[0];
					if (v.font)
						h.xAxis.labels.style.fontFamily = v.font;
					if ((g = a(v.fontsize)) !== void 0)
						g < 1 && (g = 1), h.xAxis.labels.style.fontSize = g
								+ Wa, zb(h.xAxis.labels.style);
					if (v.fontcolor)
						h.xAxis.labels.style.color = v.fontcolor.split(fa)[0]
								.replace(/^\#?/, "#");
					l = e(v.verticallinecolor,
							f.divLineColor[h.chart.paletteIndex]);
					g = a(v.verticallinethickness, 1);
					o = a(v.verticallinealpha,
							f.divLineAlpha[h.chart.paletteIndex]);
					var E = a(v.verticallinedashed, 0), F = a(
							v.verticallinedashlen, 4), C = a(
							v.verticallinedashgap, 2), K = $(l, o), N, G, O;
					for (l = 0; l < v.category.length; l += 1)
						n = v.category[l], o = B.getCleanValue(n.x), o !== null
								&& !n.vline
								&& (m.catOccupied[o] = !0, O = a(n.showlabel,
										n.showname, z), N = a(
										n.showverticalline, n.showline, n.sl, 0), G = a(
										n.linedashed, E), n = O === 0
										|| c % y !== 0 ? t : A(D(n.label,
										n.name)), q.plotLines.push({
											isGrid : !0,
											isCat : !0,
											width : N ? g : 0,
											color : K,
											dashStyle : ma(F, C, g, G),
											value : o,
											label : {
												text : n,
												style : q.labels.style,
												align : La,
												verticalAlign : Xa,
												textAlign : La,
												rotation : 0,
												x : 0,
												y : 0
											}
										}), this.pointValueWatcher(h, null, o), c += 1);
					if (r === "mixed")
						m.requaredAutoNumeicLabels = a(
								this.requaredAutoNumeicLabels, 1)
				} else
					m.requaredAutoNumeicLabels = a(
							this.requaredAutoNumeicLabels, 1);
				m.adjustMinMax = !0
			},
			getPointColor : function(a, e) {
				var f, c, a = m(a), e = Tb(e);
				f = kb(a, 70);
				c = Bb(a, 50);
				return {
					FCcolor : {
						gradientUnits : "objectBoundingBox",
						cx : 0.4,
						cy : 0.4,
						r : "100%",
						color : f + fa + c,
						alpha : e + fa + e,
						ratio : rb,
						radialGradient : !0
					}
				}
			},
			defaultSeriesType : "scatter"
		}, E.xybase);
		E("mscombibase", {
			series : function(d, f, h) {
				var c, g, l, m, o = d.chart, n, q = [], t = [], y = [], r, z, A = f[J], B = this.isDual;
				f.legend.enabled = Boolean(a(d.chart.showlegend, 1));
				if (d.dataset && d.dataset.length > 0) {
					this.categoryAdder(d, f);
					m = A.oriCatTmp.length;
					c = 0;
					for (g = d.dataset.length; c < g; c += 1) {
						l = d.dataset[c];
						r = B && e(l.parentyaxis, "p").toLowerCase() === "s"
								? !0
								: !1;
						n = {
							data : []
						};
						if (r)
							n.yAxis = 1;
						z = D(l.renderas, this.defaultSeriesType).toLowerCase();
						switch (z) {
							case "line" :
							case "spline" :
								n.type = "line";
								q.push(E.mslinebase.point.call(this, h, n, l,
										o, f, m, c));
								break;
							case "area" :
							case "splinearea" :
								n.type = "area";
								f.chart.series2D3Dshift = !0;
								y.push(E.msareabase.point.call(this, h, n, l,
										o, f, m, c));
								break;
							case "column" :
							case "column3d" :
								t.push(E.mscolumn2dbase.point.call(this, h, n,
										d.dataset[c], o, f, m, c));
								break;
							default :
								r
										? (n.type = "line", q
												.push(E.mslinebase.point.call(
														this, h, n, l, o, f, m,
														c)))
										: t.push(E.mscolumn2dbase.point.call(
												this, h, n, d.dataset[c], o, f,
												m, c))
						}
					}
					f.series = o.areaovercolumns !== "0" ? f.series.concat(t,
							y, q) : f.series.concat(y, t, q);
					if (t.length === 0)
						A.hasNoColumn = !0;
					this.configureAxis(f, d);
					d.trendlines
							&& Ta(d.trendlines, f.yAxis, f[J], B, this.isBar)
				}
			}
		}, E.mscolumn2dbase)
	}
})();
